如何使用MySQL有条件地选择多列?

时间:2014-08-29 22:21:32

标签: mysql select prepared-statement control-flow prepare

假设我有3列可供选择:colAcolBcolC

我们有7种选择来自:

single column: colA | colB | colC
double column: colA colB  | colA colC | colB colC
triple column: colA colB colC

我想创建一个查询,使我能够选择要选择的列。例如,如果我想选择列colBcolC,那么SELECT应该返回

colB colC
---------
 1    4
 2    5
 3    6
---------

我已经搜索了很长时间,我遇到的最多的是CASEIF 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:另一种方法是挑选哪些列显示,也许它更容易?

1 个答案:

答案 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)。