Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL IN-Klausel – gibt IN-Elemente zurück, die nicht übereinstimmen

Es scheint, dass Ihre Rooms Tabelle enthält nur Daten für aktive Belegungen. Dies ist in vielerlei Hinsicht sinnvoll, da Sie keine Informationen über Personen speichern möchten, die einen Raum nicht wirklich belegen. Es stellt jedoch eine Herausforderung dar, die gewünschte Ergebnismenge zu generieren, da die fehlenden Räume nicht in Rooms vorhanden sind .

Eine Möglichkeit ist hier der „Kalendertabellen“-Ansatz. Sie können LEFT JOIN eine Tabelle mit allen Räumen zu Ihren aktuellen Rooms Tabelle, und markieren Sie dann fehlende Insassen als nobody .

SELECT t1.Room,
       COALESCE(t2.OccupantName, 'Nobody') AS OccupantName
FROM
(
    SELECT "Room 1" AS Room
    UNION ALL
    SELECT "Room 2"
    UNION ALL
    SELECT "Room 3"
    UNION ALL
    SELECT "Room 4"
) AS t1
LEFT JOIN Rooms AS t2
    ON t1.Room = t2.Rooms

Beachten Sie, dass ich eine Zeilenunterabfrage verwendet habe, um eine Tabelle für alle Räume zu erstellen. In der Praxis könnten Sie eine tatsächliche Tabelle in Workbench erstellen, die diese Informationen enthält.

Demo hier:

SQLFiddle