2017-01-03 16 views
0

私はこれをすべて探してきましたが、残念ながら本当の答えは私を逃しています。句はその3つの別々のSELECTにこれを分離し、実際にはかなり多額であるMySQLの選択結果からの列の結合/積み重ね

SELECT alpha, beta, gamma FROM table WHERE (...) 

ザ・はおそらく悪い考えのようになります。私は、この基本的な例と同様に3つの列を返すSELECT文を持っています。さて、これは次のようになりますテーブルを返します。

alpha | beta | gamma 
---------------------- 
apple | (empty) | orange 
banana | lemon | apple 

私はしかし、達成したい何を、上記の結果ではないですが、以下:、結果列である

result 
------- 
apple 
orange 
banana 
lemon 

前のSELECTステートメントからの "スタック"または "結合"された1つの列に。順序は重要ではありません。ブランク/欠落/ヌルフィールドは省略され、重複(リンゴ)はフィルタリングされるため、リストには一意の値が含まれます。

技術的には、UNIONの行に沿ったものは動作しますが、UNIONは複数のSELECT文を結合します。私は1つのSELECTステートメントから結果の列を結合したい。

任意の提案は大歓迎です:)

+0

アプリケーションレベルでこれを行うと簡単な作業 – e4c5

+0

ユニオンの使用には何が問題なのですか? – GurV

+0

確かに。それでも、アプリケーションで結果を変換する必要がないように、これには「エレガントな」ソリューションがある場合は主に興味がありました。私は何かを逃したいと思っていましたが、実際の解決策がない場合は、アプリケーションレベルで行う必要があります。 – user2581135

答えて

0

あなたは、いくつかのunion文のそれぞれで実行されている複雑なwhere文のオーバーヘッドを軽減しようとしています。解決策は、単純なステートメントでunionを実行し、結果にwhereを実行することです。あなたの例では:

select distinct combined_col from (select alpha `combined_col` from table union select beta from table union select gamma from table) tab_alias where COMPLICATED_WHERE_STATEMENT; 
関連する問題