Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql:Wählen Sie alle Elemente aus Tabelle A aus, wenn sie nicht in Tabelle B vorhanden sind

Hier ist der Prototyp für das, was Sie tun möchten:

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

Hier id wird in beiden Tabellen als PK und FK angenommen. Sie sollten sich entsprechend anpassen. Beachten Sie auch, dass es in diesem Fall wichtig ist, PK und FK zu vergleichen.

So sollte Ihre Abfrage aussehen:

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

Wenn Sie möchten, überprüfen Sie die Teile Ihrer Abfrage, indem Sie sie im mysql-Client ausführen. Beispielsweise können Sie sicherstellen, ob Folgendes Datensätze zurückgibt oder nicht:

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

Wenn nicht, haben Sie den Übeltäter gefunden und handeln entsprechend mit anderen Teilen :)