¿Usando Two LEFT JOIN o use AND con single LEFT JOIN?

7

Usando dos LEFT JOINs ie

SELECT <some columns>
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON <condition1>
LEFT JOIN Table2 AS t3 ON <condition2>

¿Es esto lo mismo que usar ANDen single LEFT JOIN? es decir

SELECT <some columns>
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON <condition1>
AND <condition2>

Ambos son iguales o diferentes (en general)?

0x6773
fuente
Depende de su requisito y condición de encendido. Si pones t1.col1 = t2.col1 con Table2 y t1.col1.t3.col1 Sería lo mismo.
2
La segunda consulta estaría más cerca de la primera en términos de resultados si usara OR en lugar de AND, pero en general sería una consulta diferente .
Andriy M
Trate de usar explicar el plan para ver la diferencia :)
Arnab Datta
@RajeshRanjan no, no serían equivalentes, incluso en ese caso.
ypercubeᵀᴹ

Respuestas:

13

Ellos son diferentes. En la primera opción, obtiene 2 veces Table2en su consulta. Una vez como t2y una vez como t3. Ambos tienen un contenido diferente y debes volverlos a juntar de alguna manera. Para mí, esto es más un OR en lugar de un AND . En la segunda opción, solo obtiene las Table2filas que cumplen ambos criterios.

Supongamos que tiene Table2con el siguiente contenido:

| Color | Size |
|-------|------|
| Red   |  S   |
| Blue  |  S   |
| Blue  |  XS  |

Suponga que desea tener las filas que son Bluey S. En su primera opción obtiene todas las filas ( t2por ejemplo, con todas Bluey t3con todas S) y en su segunda opción solo obtiene la fila 2.

Marco
fuente
44
No solo eso, sino que ya que se trata de unir externamente la tabla dos veces, también obtendrá un producto mini-cartesiano con la primera consulta. Quiero decir, una Table1fila quiere color azul y tamaño S. Entonces, la primera unión le da dos Table2coincidencias, duplicando así la Table1fila, y la segunda unión da dos coincidencias para cada una de las copias, resultando en cuatro filas en total.
Andriy M