假设我有 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:另一种方法是选择哪些列不显示,也许更容易?
最佳答案
关注@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)。
关于mysql - 如何使用 MySQL 有条件 SELECT 多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25577017/