假设我有3列可供选择:colA
,colB
和colC
。
我们有7种选择来自:
single column: colA | colB | colC
double column: colA colB | colA colC | colB colC
triple column: colA colB colC
我想创建一个查询,使我能够选择要选择的列。例如,如果我想选择列colB
和colC
,那么SELECT应该返回
colB colC
---------
1 4
2 5
3 6
---------
我已经搜索了很长时间,我遇到的最多的是CASE
和IF
Control Flow Functions,但我无法实现它们所描述的内容。例如,如果我进行以下查询,那么未激活的列将显示NULL值(而它们不应显示):
SET @colB_switch := 1;
SET @colC_switch := 0;
SELECT
CASE WHEN @colB_switch = 1 THEN colB END,
CASE WHEN @colC_switch = 1 THEN colC END
FROM my_table
对于这个简单的案例,我可以简单地对每一种可能性进行硬编码,但是当我们有几十列时,我们就有数千种可能性!
PS:另一种方法是挑选不哪些列显示,也许它更容易?
答案 0 :(得分:2)
关注@GordonLinoff suggestion,这是使用MySQL有条件地选择多个列的一种方法:
SET @colA := NULL;
SET @colB := 'colB';
SET @colC := 'colC';
SET @stat := CONCAT('SELECT ', CONCAT_WS(',', @colA, @colB, @colC), ' FROM my_table');
PREPARE stmt1 FROM @stat;
EXECUTE stmt1;
CONCAT_WS()很方便,因为如果我不想选择给定列,我只需将其设置为NULL
(示例中为colA)。