2012-09-19 6 views
5

Perché quando uso UNIONE prima INNER JOIN come questoUNION prima 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 

ho un eror: non poteva vincolati in più parti identifer "some_table3.some_column1"? Tutti i tipi di dati sono compatibili.

risposta

14

Si riceve un errore perché non è valido Sintassi SQL. UNION ALL sintassi è:

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

Non è possibile fare riferimento le colonne da entrambi domanda come si sta cercando di fare. Se si desidera fare riferimento, allora si dovrà usare qualcosa di simile:

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

Si sta tentando di unire some_table1 a some_table3 quando some_table1 non esiste nella seconda metà della query, solo il primo.

2

Sono indovinando si sta andando per qualcosa di simile?

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ì, sembra quello che voglio.Come capisco devo raggruppare i risultati prima di utilizzare INNER JOIN? –