2012-09-19 17 views
5

Por qué cuando uso UNIÓN antes INNER JOIN como estoUNIÓN antes INNER JOIN

select some_table1.some_column1, 
      some_table1.some_column2 
    FROM some_table1 
    UNION ALL 
    select some_table2.some_column1, 
      some_table2.some_column2 
    FROM some_table2 
    INNER JOIN some_table3 
    ON some_table3.some_column1 = some_table1.some_column1 

Tengo una EROR: no podía atado de varias partes identificador "some_table3.some_column1"? Todos los tipos de datos son compatibles.

Respuesta

14

Aparece un error porque no es una sintaxis SQL válida. UNION ALL sintaxis es:

SELECT <column1> 
FROM <table1> 
UNION ALL 
SELECT <column1> 
FROM <table2> 

No se puede hacer referencia a las columnas de la consulta, ya sea que usted está tratando de hacer. Si desea hacer referencia, a continuación, tendrá que usar algo como esto:

select * 
from 
(
    select some_table1.some_column1, some_table1.some_column2 
    FROM some_table1 
    UNION ALL 
    select some_table2.some_column1, some_table2.some_column2 
    FROM some_table2 
) t1 
INNER JOIN some_table3 
ON some_table3.some_column1 = t1.some_column1 
2

Está intentando unir some_table1 a some_table3 cuando some_table1 no existe en la segunda mitad de la consulta, solamente el primero.

2

que supongo que usted va para algo como esto?

SELECT 
(
     select some_table1.some_column1, 
       some_table2.some_column2 
     FROM some_table1 
     UNION ALL 
     select some_table2.some_column1, 
       some_table2.some_column2 
     FROM some_table2 
) sub 
     INNER JOIN some_table3 
     ON some_table3.some_column1 = sub.some_column1 
+0

Sí, parece lo que quiero. Según tengo entendido, debo agrupar los resultados antes de utilizar INNER JOIN? –