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

mysql:seleziona tutti gli elementi dalla tabella A se non esistono nella tabella B

Ecco il prototipo per quello che vuoi fare:

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

Qui, id si presume essere il PK e FK in entrambe le tabelle. Dovresti adattarti di conseguenza. Si noti inoltre che in questo caso è importante confrontare PK e FK.

Quindi, ecco come dovrebbe apparire la tua query:

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

Se vuoi, controlla le parti della tua query eseguendole nel client mysql. Ad esempio, puoi assicurarti che quanto segue restituisca dei record o meno:

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

In caso contrario, hai trovato il colpevole e agisci di conseguenza con le altre parti :)