Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Klauzula SQL IN - odzyskaj elementy IN, które się nie zgadzają

Wygląda na to, że Twoje Rooms tabela zawiera tylko dane dla aktywnych obłożeń. Ma to sens pod wieloma względami, ponieważ nie chcesz przechowywać informacji o osobach, które tak naprawdę nie zajmują pokoju. Jednak wygenerowanie pożądanego zestawu wyników stanowi wyzwanie, ponieważ brakujące pokoje nie są obecne w Rooms .

Jedną z opcji jest tutaj podejście „tabela kalendarza”. Możesz LEFT JOIN tabela zawierająca wszystkie pokoje do Twoich aktualnych Rooms tabeli, a następnie oznacz brakujących osób jako 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

Zauważ, że użyłem podzapytania wiersza, aby utworzyć tabelę dla wszystkich pomieszczeń. W praktyce możesz utworzyć w Workbenchu ​​rzeczywistą tabelę zawierającą te informacje.

Demo tutaj:

SQLFiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Maksymalny rozmiar tabeli dla bazy danych MySQL

  2. Posiadanie kolumn znaczników czasu utworzenia i ostatniej aktualizacji w MySQL 4.0

  3. Mysql 5.7.20:Nie można utworzyć wartości JSON z ciągu znaków za pomocą ZESTAWU ZNAKÓW „binary”

  4. Jak wybrać losowo unikatowe pary wierszy z tabeli?

  5. Przepisywanie adresu URL opencart