2016-09-28 1 views
0

Ich versuche, eine SELECT Abfrage zu finden, die alle gibt tableA.tba_id, die nicht auf tableB vorhanden sind (beachten Sie, dass zwei verschiedene Fremdschlüssel - tbb_tbAID1 und tbb_tbAID2 zwischen Daten. You can find DB Model hereSELECT NICHT IN zwei Fremdschlüssel aus anderen Tisch

Was kann ich bisher
Diese Tests nur eine Spalte

SELECT tba_id FROM tableA 
WHERE tba_id NOT IN 
    (SELECT tbb_tbAID1 FROM tableB 
    WHERE tbb_date > '$date2') 

ich eine MySQL-Fehler, wenn auf beiden Fremdschlüssel

1241 zu testen versuchen - Operand 1 Spalte enthalten sollte (n)

Abfrage:

SELECT tba_id FROM tableA 
WHERE tba_id NOT IN 
    (SELECT tbb_tbAID1,tbb_tbAID2 FROM tableB 
    WHERE tbb_date > '$date2') 

Versuchen Sie 2:

SELECT tba_id FROM tableA 
WHERE tba_id NOT EXISTS 
    (SELECT 1 FROM tableB 
    WHERE (tba_id = tbb_tbAID1 OR tba_id = tbb_tbAID2) 
    AND tbb_date > '$date2') 

Aber bekommt mehr Ergebnisse als beim ersten Versuch (das legt nahe, dass es extrem falsch gemacht)

Try3:

SELECT tba_id FROM tableA JOIN tableB ON tba_id!=tbb_tbAID1 AND tba_is!=tbb_tbAID2 WHERE tbb_data > '$data' 

Diese Daten über enormen Satz führt, weit weg von dem ersten Methode.

Antwort

0

Die tatsächlich arbeiten query:

SELECT tba_id FROM tableA 
WHERE NOT EXISTS (SELECT * FROM tableB WHERE (tba_id = tbb_tbAID1 OR tba_id = tbb_tbAID2) AND tbb_data > '$date') 

Auf Try2, ersetzte ich SELECT 1 für SELECT * und löschen Sie diese WHERE tba_id NOT EXISTS und arbeitete wie ein Charme.

0

Erstellen Sie einen Join statt der verschachtelten Abfrage, es ist auch schneller und effizienter.

SELECT tba_id FROM tableA JOIN tableB ON tba_id!=tbb_tbAID1 AND tba_is!=tbb_tbAID2 
+0

Dies beantwortet meine Frage nicht vollständig, da ich wirklich mit 'JOIN' zuvor versucht habe (tut mir leid, dass ich es nicht erwähnt habe, Frage aktualisiert) und es nicht aus tableBs' Daten' auswählt –

Verwandte Themen