Mysql
 sql >> Database >  >> RDS >> Mysql

Clausola SQL IN - recupera gli elementi IN che non corrispondono

Sembra che le tue Rooms la tabella contiene solo i dati per le occupazioni attive. Questo ha senso in molti modi, perché non si desidera archiviare informazioni su persone che in realtà non occupano una stanza. Ma è difficile generare il set di risultati desiderato, perché le stanze mancanti non sono presenti in Rooms .

Un'opzione qui è l'approccio "tabella del calendario". Puoi LEFT JOIN una tabella contenente tutte le stanze per le tue attuali Rooms tabella, quindi etichetta gli occupanti scomparsi come 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

Si noti che ho utilizzato una sottoquery di riga per creare una tabella per tutte le stanze. In pratica, potresti creare una vera tabella in Workbench contenente queste informazioni.

Demo qui:

SQLFiddle