SELECT
a.foo
b.bar
c.foobar
FROM tableOne AS a
INNER JOIN tableTwo AS b ON a.pk = b.fk
LEFT JOIN tableThree AS c ON b.pk = c.fk
WHERE a.foo = 'something'
AND c.foobar = 'somethingelse'
Wenn die Klausel nach der WHERE-Klausel verwendet wird, scheint die linke Verknüpfung in eine innere Verknüpfung zu wechseln. Das Verhalten, das ich sehe, ist, wenn es nicht etwas in TableThree gibt, werden 0 Zeilen zurückgegeben.linker Join wird zu innerem Join
Wenn ich c.foobar = 'somethingselse' in die Join-Klausel verschiebe, verhält sich der gespeicherte Join wie ein linker Join.
Kann mir jemand auf eine Dokumentation verweisen, die beschreibt, warum das passiert? Vielen Dank
+1. nette Erklärung. –
@DaveMarkle ist der gleiche Fall, wenn ich Wert von der rechten Seite eines linken Joins in der Gruppe angeben oder haben. (ich meine es wird links nach innen konvertieren) –
@Dave Markle Wissen Sie, was wäre schneller, die WHERE-Klausel oder das JOIN-Prädikat in einem Fall wie diesem? – PerPlexSystem