webentwicklung-frage-antwort-db.com.de

WHERE-Klausel vor INNER JOIN

Wenn ich habe

SELECT * FROM Table1 t1 
LEFT JOIN Table2 t2 ON t1.id = t2.id 
WHERE t1.user='bob';

Läuft die WHERE-Klausel, nachdem die beiden Tabellen JOINED sind? 

Wie mache ich es so, dass es vor dem JOIN läuft? 

23
user1124535

Ändern Sie die WHERE in eine andere JOIN-Bedingung

LEFT JOIN Table2 t2 on t1.id = t2.id AND t1.user='bob'

22
hkf

Die where-Klausel wird vor der join ausgeführt, damit sie keine unnötigen Datensätze verbindet. Ihr Code ist also gut, so wie er ist.

72
Mosty Mostacho

Nach meiner Erfahrung in einem Left-Join können Sie keine Datensätze in der 'left' (t1) -Tabelle in der ON-Anweisung ausschließen, da definitionsgemäß alle t1-Datensätze eingeschlossen werden. Die where-Anweisung funktioniert, da sie anschließend auf das Ergebnis des Joins angewendet wird.

Ich weiß nicht genau, was Sie erreichen möchten, aber höchstwahrscheinlich passt auch ein innerer Join zu Ihren Bedürfnissen, und dann können Sie can die ON-Anweisung mit der Bedingung t1.user = 'bob' versehen.

Wenn jedoch Mosty Mostacho korrekt ist, ist der Ort (WHERE vs. ON) der Bedingung für die Ausführungsgeschwindigkeit nicht relevant.

2
tihe

RIGHT JOIN war die Lösung: 

SELECT cars.manufacturer, cars.year FROM cars 
RIGHT JOIN (SELECT m.manufacturer FROM cars AS m ORDER BY m.year DESC LIMIT 3) subq 
ON cars.manufacturer=subq.manufacturer

Ich habe es noch nicht durchgemacht, scheint aber zu funktionieren.

0
user2782001

Was Sie verwenden können, ist ein Tabellenausdruck nach FROM wie folgt:

SELECT *
FROM (SELECT
        id
    FROM Table1
    WHERE user = 'bob') AS t1
LEFT JOIN Table2 t2
    ON t1.id = t2.id
0
Georgi Mirchev

du kannst tun

SELECT * 
    FROM Table1 t1 
    LEFT JOIN Table2 t2
        ON t1.id=t2.id AND t1.user='bob';
0
g3rv4

Sie sollten nur die t1.user='bob'-Bedingung vor der anderen Bedingung zur ON-Klausel hinzufügen. Diese wird zuerst ausgewertet:

SELECT * FROM Table1 t1 
LEFT JOIN Table2 t2
ON t1.user='bob' AND t1.id = t2.id;
0
Ivan Olshansky