2012-10-10 13 views
9

algo de código SQL:varias combinaciones externas semántica

SELECT * 
FROM table1 tab1 
    LEFT OUTER JOIN table2 tab2 ON (tab1.fg = tab2.fg) 
    LEFT OUTER JOIN table4 tab4 ON (tab1.ss = tab4.ss) 
    INNER JOIN table3 tab3 ON (tab4.xya = tab3.xya) 
    LEFT OUTER JOIN table5 tab5 ON (tab4.kk = tab5.kk) 

Sé lo diferentes tipos de uniones hacer, pero lo que me gustaría saber es: para cada JOIN, qué tabla asume el papel de la "izquierda " ¿mesa? ¿El table1 siempre tendrá el rol de la tabla "IZQUIERDA"?

+1

[Aquí hay una buena explicación visual de las uniones] (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html) – Taryn

+2

Parece genial, pero yo Aún no estoy seguro de cuál es la semántica en caso de múltiples uniones. – Howie

Respuesta

14

Se procesan en orden de arriba a abajo, y todas las uniones se asocian a la "totalidad" de la cláusula FROM anterior.

en igualdad de condiciones:

  • Tab1 es el socio obligatorio para la combinación externa con el Sep2 socio opcional
  • lo anterior es el socio obligatorio para la combinación externa con el TAB4 socio opcional
  • el anterior y el tab4 son ambos socios obligatorios en INNER JOIN
  • el anterior es el socio obligatorio para el OUTER JOIN con la pestaña del socio opcional5

Sin embargo, el problema con esta consulta

SELECT * 
FROM table1 tab1 
LEFT OUTER JOIN table2 tab2 ON tab1.fg = tab2.fg 
LEFT OUTER JOIN table4 tab4 ON tab1.ss = tab4.ss 
INNER JOIN table3 tab3 ON tab4.xya = tab3.xya 
LEFT OUTER JOIN table5 tab5 ON tab4.kk = tab5.kk 

Es que en la unión interna con cuadro3 utiliza una condición que requiere TAB4 a participar, lo que hace prácticamente un vínculo obligatorio para retener los registros de la parte izquierda, por lo que en total tab1/tab4/tab3 tiene que unirse con éxito, con tab2 y tab5 opcional.

+1

¿Qué quiere decir con "Todas las cosas iguales"? ¿Cuál sería un ejemplo en este caso de que "no todas las cosas son iguales"? –

+0

¿Importa el orden de las columnas en la comparación de igualdad? – user180940

Cuestiones relacionadas