2017-01-03 56 views
0

我一直在寻找这一切,但不幸的是,真正的答案不见了。我有一个返回三列,类似这种简单的例子SELECT语句:在MySQL中选择结果中的列组合/堆列

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

WHERE子句实际上是相当丰厚的,所以这个分离成三个独立的SELECT可能会是一个坏主意。现在,这将返回一个表,它看起来是这样的:

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

我想不过来实现的,不是上述结果,但如下:

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

也就是说,结果列从前面的SELECT语句中“堆叠”或“组合”成一个单独的列。顺序并不重要。空白/缺失/空字段被省略,并且复制(苹果)被过滤,所以列表包含唯一值。

从技术上讲,沿UNION行的东西可以工作,但UNION结合了多个SELECT语句。我想结合单个SELECT语句的结果列。

任何建议都非常赞赏:)

+0

一个简单的任务,如果你在应用程序级这样做 – e4c5

+0

使用union有什么问题? – GurV

+0

确实。不过,如果有一些“优雅”的解决方案,以避免在应用程序中转换结果,我主要感兴趣。我希望错过某些东西 - 但是如果没有真正的解决方案,应用程序级别将不得不做。 – user2581135

回答

0

你试图减轻复杂where语句的开销与每个几个union语句运行。解决方法是在简单语句上执行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;