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

mysql:wybierz wszystkie elementy z tabeli A, jeśli nie istnieją w tabeli B

Oto prototyp tego, co chcesz zrobić:

SELECT * FROM table1 t1
  WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t1.id = t2.id)

Tutaj, id przyjmuje się, że w obu tabelach są to PK i FK. Powinieneś odpowiednio dostosować. Zauważ również, że w tym przypadku ważne jest porównanie PK i FK.

Oto jak powinno wyglądać Twoje zapytanie:

SELECT id, room_name FROM rooms r
WHERE NOT EXISTS 
(SELECT * FROM room_events re
    WHERE
          r.room_id = re.room_id
          AND
          (
          room_start BETWEEN '1294727400' AND '1294729200' 
          OR 
          room_finish BETWEEN '1294727400' AND '1294729200')
          )

Jeśli chcesz, możesz sprawdzić części zapytania, wykonując je w kliencie mysql. Na przykład możesz upewnić się, czy poniższe elementy zwrócą jakiekolwiek rekordy, czy nie:

SELECT * FROM room_events 
    WHERE room_start BETWEEN '1294727400' AND '1294729200' 
          OR 
          room_finish BETWEEN '1294727400' AND '1294729200'

Jeśli tak się nie stanie, znalazłeś winowajcę i postępuj zgodnie z innymi częściami :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 500 wewnętrzny błąd serwera?

  2. Czy MySQL FIND_IN_SET lub odpowiednik może używać indeksów?

  3. Python łączy się z bazą danych MySQL za pomocą złącza MySQL i przykładu PyMySQL

  4. Jak zoptymalizować wydajność MySQL za pomocą MySQLTuner

  5. Ostrzeżenie:mysql_result() [function.mysql-result]:Nie można przeskoczyć do wiersza 0 w indeksie wyników MySQL 5 w profile.php w wierszu 11