mysql - 如何使用 MySQL 有条件 SELECT 多列?

标签 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
---------
<小时/>

我已经找了好久了,遇到最多的就是CASEIFControl 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/

相关文章:

php - yelp 等网站如何转换位置输入(邮政编码、地区名称、县)并使用它进行搜索?

使用子查询的 MySql SELECT 无法按预期工作

mysql - 选择用户在 mysql 中有多个不同的记录

java - 为什么 JDBC 驱动程序将准备好的语句保持在连接级别?

MySQL,使用SQL检查表中是否存在列

jquery - 如何使用 jquery-ui-1.8.21.autocomplete 和来自 mysql 的数据填写表单

mysql - 当涉及的所有列都相同且仅 where 条件发生变化时,为什么查询执行速度如此之慢?

mysql - 在存储过程中循环准备语句查询的结果

php - 准备好的语句不能用整数值执行多次

php - 到底什么时候进行 PHP-MySQL 变量赋值?