sql >> Database teknologi >  >> RDS >> Mysql

SQL IN-klausul - få IN-elementer tilbage, der ikke matchede

Det ser ud til, at dine Rooms tabel indeholder kun data for aktive beboere. Dette giver mening på mange måder, fordi du ikke ønsker at gemme oplysninger om personer, der ikke rigtigt optager et værelse. Men det udgør en udfordring at generere dit ønskede resultatsæt, fordi de manglende lokaler ikke er til stede i Rooms .

En mulighed her er "kalendertabel"-tilgangen. Du kan LEFT JOIN en tabel, der indeholder alle rum til dine nuværende Rooms tabel, og mærk derefter manglende personer 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

Bemærk, at jeg brugte en linjeunderforespørgsel til at oprette en tabel for alle rum. I praksis kan du oprette en egentlig tabel i Workbench, der indeholder disse oplysninger.

Demo her:

SQLFiddle



  1. Hvordan grupperer jeg på kontinuerlige områder

  2. Tilføj WHERE-sætninger til SQL dynamisk / programmatisk

  3. Brug SCOPE_IDENTITY() til at returnere den sidst indsatte identitetsværdi i samme omfang (SQL-server)

  4. Beskæftiger sig med PHP-server og MySQL-server i forskellige tidszoner