¿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)?


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.