7

このように INNER JOIN の前に UNION を使用すると、なぜ

    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 

エラーがあります: マルチパート識別子 "some_table3.some_column1" をバインドできませんでした? すべてのデータ型に互換性があります。

4

3 に答える 3

24

これは有効な SQL 構文ではないため、エラーが発生しています。 UNION ALL構文は次のとおりです。

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

あなたがやろうとしているように、どちらのクエリからも列を参照することはできません。参照したい場合は、次のようなものを使用する必要があります。

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 
于 2012-09-19T17:10:31.407 に答える
2

whenがクエリの後半に存在せず、最初だけに参加some_table1しようとしています。some_table3some_table1

于 2012-09-19T17:09:36.650 に答える
2

私はあなたがこのようなものに行くと思いますか?

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 
于 2012-09-19T17:11:27.020 に答える