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'
Tener la cláusula y después de la cláusula where parece girar a la izquierda unirse en una combinación interna. El comportamiento que estoy viendo es que si no hay "algo malo" en la tabla Tres, se devolverán 0 filas.izquierda se unen se convierte en unión interna
Si muevo c.foobar = 'somethingelse' en la cláusula de unión, la unión almacenada actuará como una combinación de la izquierda.
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
AND c.foobar = 'somethingelse'
WHERE a.foo = 'something'
¿Puede alguien indicarme alguna documentación que describa por qué sucede esto? Te lo agradezco mucho
+1. buena explicación. –
@DaveMarkle es el mismo caso cuando especifico el valor del lado derecho de una combinación izquierda en el grupo por o teniendo. (me refiero a que se convertirá de izquierda a interna) –
@Dave Markle ¿Sabes qué sería más rápido, la cláusula WHERE o el predicado JOIN en un caso como este? – PerPlexSystem