sql >> Base de Datos >  >> RDS >> Mysql

Cláusula SQL IN:recuperar elementos IN que no coincidían

Parece que sus Rooms La tabla solo contiene datos de ocupaciones activas. Esto tiene sentido en muchos sentidos, porque no desea almacenar información sobre personas que en realidad no ocupan una habitación. Pero genera un desafío para generar el conjunto de resultados deseado, porque las habitaciones que faltan no están presentes en Rooms .

Una opción aquí es el enfoque de "tabla de calendario". Puedes LEFT JOIN una tabla que contiene todas las habitaciones de sus Rooms actuales mesa y luego etiquete a los ocupantes que faltan como 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

Tenga en cuenta que utilicé una subconsulta de línea para crear una tabla para todas las habitaciones. En la práctica, podría crear una tabla real en Workbench que contenga esta información.

Demostración aquí:

SQLFiddle