Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL IN клауза - върнете IN елементи, които не съвпадат

Изглежда, че вашите Rooms таблицата съдържа само данни за активни обитатели. Това има смисъл в много отношения, защото не искате да съхранявате информация за хора, които всъщност не заемат стая. Но представлява предизвикателство да генерирате желания набор от резултати, тъй като липсващите стаи не присъстват в Rooms .

Една от възможностите тук е подходът на "календарната таблица". Можете да LEFT JOIN таблица, съдържаща всички стаи към текущите ви Rooms таблица и след това маркирайте липсващите обитатели като 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

Имайте предвид, че използвах подзаявка за ред, за да създам таблица за всички стаи. На практика можете да създадете действителна таблица в Workbench, съдържаща тази информация.

Демо тук:

SQLPiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-добрият начин за съхранение на потребителски настройки в MySQL?

  2. Какви са оптималните размери на varchar за MySQL?

  3. Как да изпращате имейл от MySQL 5.1

  4. Как да създам тази структура на масива в HTML форма?

  5. Mysql подобно текстово търсене