Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql :sélectionnez tous les éléments de la table A s'ils n'existent pas dans la table B

Voici le prototype de ce que vous voulez faire :

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

Ici, id est supposé être le PK et le FK dans les deux tableaux. Vous devez vous ajuster en conséquence. Notez également qu'il est important de comparer PK et FK dans ce cas.

Alors, voici à quoi votre requête devrait ressembler :

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 vous le souhaitez, vous vérifiez les parties de votre requête en les exécutant dans le client mysql. Par exemple, vous pouvez vous assurer que les éléments suivants renvoient ou non des enregistrements :

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

Si ce n'est pas le cas, vous avez trouvé le coupable et agissez en conséquence avec les autres parties :)