Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql:selecione todos os itens da tabela A se não existir na tabela B


Aqui está o protótipo para o que você quer fazer:
SELECT * FROM table1 t1
  WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t1.id = t2.id)

Aqui, id é assumido como PK e FK em ambas as tabelas. Você deve ajustar de acordo. Observe também que é importante comparar PK e FK neste caso.

Então, veja como sua consulta deve ficar:
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 você quiser, verifique as partes da sua consulta executando-as no cliente mysql. Por exemplo, você pode verificar se o seguinte retorna algum registro ou não:
SELECT * FROM room_events 
    WHERE room_start BETWEEN '1294727400' AND '1294729200' 
          OR 
          room_finish BETWEEN '1294727400' AND '1294729200'

Se isso não acontecer, você encontrou o culpado e agiu de acordo com outras partes :)