Mysql
 sql >> Base de données >  >> RDS >> Mysql

Clause SQL IN - récupère les éléments IN qui ne correspondent pas

Il semble que vos Rooms le tableau ne contient que des données pour les occupations actives. Cela a du sens à bien des égards, car vous ne voulez pas stocker d'informations sur des personnes qui n'occupent pas vraiment une pièce. Mais il est difficile de générer l'ensemble de résultats souhaité, car les salles manquantes ne sont pas présentes dans Rooms .

Une option ici est l'approche "calendrier table". Vous pouvez LEFT JOIN un tableau contenant toutes les pièces de votre Rooms actuel table, puis étiquetez les occupants manquants comme 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

Notez que j'ai utilisé une sous-requête de ligne pour créer une table pour toutes les pièces. En pratique, vous pourriez créer une table réelle dans Workbench contenant ces informations.

Démo ici :

SQLFiddle