sql >> Databáze >  >> RDS >> Mysql

mysql:vyberte všechny položky z tabulky A, pokud neexistují v tabulce B

Zde je prototyp toho, co chcete udělat:

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

Zde id se předpokládá PK a FK v obou tabulkách. Měli byste se tomu přizpůsobit. Všimněte si také, že v tomto případě je důležité porovnat PK a FK.

Takže váš dotaz by měl vypadat následovně:

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')
          )

Pokud chcete, můžete zkontrolovat části vašeho dotazu jejich spuštěním v mysql klientovi. Můžete se například ujistit, zda následující vrátí nějaké záznamy nebo ne:

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

Pokud ne, našli jste viníka a podle toho se chovejte s ostatními částmi :)



  1. MYSQL vrací duplicitní řádky

  2. mysql zobrazuje dostupné časové úseky a obsazené časové úseky z tabulky

  3. Alternativa k mysql_real_escape_string bez připojení k DB

  4. Jak získat primární klíč tabulky?