sql >> Database >  >> RDS >> Mysql

SQL IN-clausule - krijg IN-elementen terug die niet overeenkwamen

Het lijkt erop dat uw Rooms tabel bevat alleen gegevens voor actieve bezettingen. Dit is in veel opzichten logisch, omdat u geen informatie wilt opslaan over mensen die niet echt een kamer bezetten. Maar het is een uitdaging om de gewenste resultatenset te genereren, omdat de ontbrekende kamers niet aanwezig zijn in Rooms .

Een optie hier is de "kalendertabel" -benadering. U kunt LEFT JOIN een tabel met alle kamers tot uw huidige Rooms tafel en label vervolgens ontbrekende bewoners 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

Merk op dat ik een regelsubquery heb gebruikt om een ​​tabel voor alle kamers te maken. In de praktijk zou je in Workbench een echte tabel kunnen maken met deze informatie.

Demo hier:

SQLFiddle



  1. Kan binair bestand niet downloaden in PHP

  2. Wat is MariaDB? Hoe werkt MariaDB?

  3. MySQL-opgeslagen procedures gebruiken ze of niet om ze te gebruiken

  4. SQL geeft geen null-waarden weer bij een query die niet gelijk is aan?