2017-01-03 8 views
0

Ich habe nach all dem gesucht, aber leider entgeht mir die wirkliche Antwort. Ich habe eine SELECT-Anweisung, die drei Spalten, ähnlich wie diesen Grundes Beispiel gibt:Kombinieren/Stapeln von Spalten von Select Ergebnis in MySQL

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

Das WHERE-Klausel tatsächlich ziemlich heftige ist, so dass diese in drei separaten SELECTs Trennung wäre wahrscheinlich eine schlechte Idee. Nun gibt diese eine Tabelle, die etwa wie folgt aussieht:

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

Was möchte ich jedoch erreichen, ist nicht das obige Ergebnis, aber die folgenden:

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

Das heißt, die Ergebnisspalten von der vorherigen SELECT-Anweisung sind "gestapelt" oder "kombiniert" in einer einzigen Spalte. Die Reihenfolge ist nicht wichtig. Leere/fehlende/Null-Felder werden weggelassen und Duplikate (Apple) werden gefiltert, sodass die Liste eindeutige Werte enthält.

Technisch gesehen würde etwas in der Art von UNION funktionieren, aber UNION kombiniert mehrere SELECT-Anweisungen. Ich möchte die Ergebnisspalten aus einer einzelnen SELECT-Anweisung kombinieren.

sind Irgendwelche Vorschläge sehr geschätzt :)

+0

Eine triviale Aufgabe, wenn Sie dies auf Anwendungsebene tun – e4c5

+0

Was ist falsch mit Union verwenden? – GurV

+0

In der Tat. Dennoch war ich vor allem daran interessiert, ob es eine "elegante" Lösung gibt, um das Ergebnis in der Anwendung nicht zu transformieren. Ich hatte gehofft, etwas verpasst zu haben - aber wenn es keine wirkliche Lösung gibt, muss das Anwendungsniveau reichen. – user2581135

Antwort

0

Sie versuchen, den Aufwand einer komplexen where Anweisung wird ausgeführt mit jedem von mehreren union Aussagen zu mildern. Die Lösung besteht darin, das union auf eine einfache Anweisung zu setzen und das where über das Ergebnis auszuführen. In Ihrem Beispiel:

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;