sql >> Base de Datos >  >> RDS >> Mysql

mysql:seleccione todos los elementos de la tabla A si no existen en la tabla B

Aquí está el prototipo de lo que quiere hacer:

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

Aquí, id se supone que es PK y FK en ambas tablas. Debe ajustar en consecuencia. Tenga en cuenta también que es importante comparar PK y FK en este caso.

Entonces, así es como debería verse su consulta:

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

Si lo desea, verifique las partes de su consulta ejecutándolas en el cliente mysql. Por ejemplo, puede asegurarse de que lo siguiente devuelva algún registro o no:

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

Si no es así, ha encontrado al culpable y actúa en consecuencia con otras partes :)