なぜ
select 1 as a, 2 as b
union all
select 20 as b, 10 as a
戻り値
a b
1 2
20 10
それ以外の
a b
1 2
10 20
?
union
列名を一致させる方法はありますか?
いいえ、UNION では順番に選択する必要があります。
Union は、列の数と、クエリ文字列内のそれらの相対位置のみを調べます。エイリアスまたはソース列名に基づく混合一致はありません。たとえば、2 つの完全に異なるテーブルを持つことができます。
SELECT x,y FROM foo
UNION
SELECT p,q FROM bar
この場合、MySQL は何をすべきでしょうか? 単一の行を返す
x,y,p,q
列名が一致しないためですか?いいえ。それは間違っているでしょう。
列名は、ユニオン列を定義するユニオンの最初の部分にのみ関連します。他の共用体は、最初の選択から列が指定された順序と同じ順序で結合され、多くの場合、異なる名前が付けられます。最初の列を 2 番目の列に関連付けたい場合は、できません。ただし、2 番目の select ステートメントを調整して、列を正しい順序に並べることができます。