如何用SQL查询在同一张表中将单个字段拆分为多列对应字段
解决方案
要实现你需要的结果,核心是通过条件判断为每条记录生成对应字段的值,不存在的情况留空。以下是通用SQL实现,以及针对MySQL的简化版本:
通用SQL(适用于大多数数据库:PostgreSQL、SQL Server、Oracle等)
SELECT user_id, meta_id, CASE WHEN meta_id = 11 THEN meta_value ELSE '' END AS meta_value11, CASE WHEN meta_id = 12 THEN meta_value ELSE '' END AS meta_value12 FROM meta_data WHERE user_id = 1 AND meta_id IN (11, 12);
MySQL简化版本
MySQL支持IF()函数,可以让代码更简洁:
SELECT user_id, meta_id, IF(meta_id = 11, meta_value, '') AS meta_value11, IF(meta_id = 12, meta_value, '') AS meta_value12 FROM meta_data WHERE user_id = 1 AND meta_id IN (11, 12);
执行结果
运行上述语句后,会得到你期望的输出:
| user_id | meta_id | meta_value11 | meta_value12 | ------- | ------- | ------------ | ------------ | 1 | 11 | abc | | 1 | 12 | | xyz
逻辑说明
- 对于
meta_value11:仅当当前记录的meta_id是11时,取对应的meta_value,否则返回空字符串 - 对于
meta_value12:仅当当前记录的meta_id是12时,取对应的meta_value,否则返回空字符串 WHERE子句用IN替代OR,逻辑更清晰且性能一致
内容的提问来源于stack exchange,提问作者Developer
相关产品推荐
相关产品推荐

