2010-11-26 1 views
1

Im Moment habe ich eine AbfrageMySQL Join und innere wählt

SELECT id FROM table1 WHERE {Filter auf table1} UND id NOT IN (SELECT table1ID FROM Tabelle2 WHERE-Bedingung = 0)

Table1 hat eine 1 - Viele Beziehung mit table2 und ich suche nach allen IDs, die keine Einträge in table2 mit Bedingung = 0 haben.

Gibt es eine Möglichkeit, diese Abfrage ohne die innere Auswahl neu zu schreiben? Ich kratze mich seit einiger Zeit mit dem Kopf darüber und irgendwelche Hinweise wären willkommen.

Antwort

1

können Sie versuchen, so etwas wie

SELECT id 
FROM table1 t1 LEFT JOIN 
     table2 t2 ON t1.ID = t2.table1ID 
        AND t2.Condition = 0 
WHERE {filters on table1} 
AND  t2.table1ID IS NULL 

Oder einfach nur so gut wäre

SELECT id 
FROM table1 t1 
WHERE {filters on table1} 
AND  NOT EXISTS (
         SELECT 1 
         FROM table2 t2 
         WHERE t1.ID = t2.table1ID 
         ADN  t2.condition = 0 
        ) 
+0

Wäre nicht, dass erste Abfrage haben eine OUTER JOIN sein? –

+0

Nein, LINKER JOIN sollte in Ordnung sein. Sie suchen nach fehlenden Elementen (also dem IS NULL) und sollten nur eine einzelne Zeile zurückgeben, da etwas nur einmal fehlen kann. –

+0

Danke Kumpel, das ist perfekt. Ich hatte etwas Ähnliches wie das erste, konnte es nicht richtig verstehen. Sehr geschätzt. – PuffTheMagicDragQueen