sql >> Databasteknik >  >> RDS >> Mysql

SQL IN-sats - få tillbaka IN-element som inte matchade

Det verkar som att dina Rooms Tabellen innehåller endast data för aktiva beläggningar. Detta är vettigt på många sätt, eftersom du inte vill lagra information om personer som inte riktigt ockuperar ett rum. Men det är en utmaning att skapa din önskade resultatuppsättning, eftersom de saknade rummen inte finns i Rooms .

Ett alternativ här är "kalendertabell"-metoden. Du kan LEFT JOIN en tabell som innehåller alla rum till dina nuvarande Rooms tabell och märk sedan saknade passagerare som 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

Observera att jag använde en linjeunderfråga för att skapa en tabell för alla rum. I praktiken kan du skapa en faktisk tabell i Workbench som innehåller denna information.

Demo här:

SQLFiddle



  1. php password_verify fungerar inte med databasen

  2. Jag har av misstag låst ut root på MySQL

  3. Uppdaterar redan markerade kryssrutor i PHP

  4. Hämtar kompletta felmeddelanden i isql