Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Cláusula SQL IN - recupera elementos IN que não correspondem


Parece que seus Rooms tabela contém apenas dados para ocupações ativas. Isso faz sentido de várias maneiras, porque você não deseja armazenar informações sobre pessoas que não estão realmente ocupando uma sala. Mas é um desafio gerar o conjunto de resultados desejado, porque as salas ausentes não estão presentes em Rooms .

Uma opção aqui é a abordagem "tabela de calendário". Você pode LEFT JOIN uma tabela contendo todos os quartos para seus Rooms atuais tabela e, em seguida, rotule os ocupantes ausentes 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

Observe que usei uma subconsulta de linha para criar uma tabela para todas as salas. Na prática, você pode criar uma tabela real no Workbench contendo essas informações.

Demonstração aqui:

SQLFiddle