You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:20:58