MySQL查询:如何按指定名称筛选值为1的对应列?
MySQL动态返回指定列的查询方案
假设你的数据表名为your_table,结构和数据如下:
| Name | Item A | Item B | Item C |
|---|---|---|---|
| Jhon | 0 | 1 | 1 |
| Lee | 1 | 0 | 0 |
方案1:针对单个名称的固定查询
如果只是单独查询某个名称,直接编写对应列的SELECT语句即可:
查询Jhon:
SELECT Name, `Item B`, `Item C` FROM your_table WHERE Name = 'Jhon';
查询Lee:
SELECT Name, `Item A` FROM your_table WHERE Name = 'Lee';
方案2:动态适配名称的通用查询
如果需要根据输入的名称自动返回对应列,可以使用MySQL的动态SQL实现:
-- 设置要查询的目标名称,可替换为'Lee' SET @target_name = 'Jhon'; -- 拼接动态查询语句 SET @sql = CONCAT( 'SELECT Name', CASE @target_name WHEN 'Jhon' THEN ', `Item B`, `Item C`' WHEN 'Lee' THEN ', `Item A`' ELSE '' END, ' FROM your_table WHERE Name = ''', @target_name, '''' ); -- 执行动态SQL PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
说明
- MySQL的SELECT语句列是静态定义的,无法在单个静态查询中根据条件返回不同列集合,因此要么分写单独查询,要么用动态SQL拼接语句。
- 当列名包含空格时,必须用反引号(`)包裹,避免语法错误。
内容的提问来源于stack exchange,提问作者JustXie
相关产品推荐
相关产品推荐

