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

MySQL多表查询行转列:将同一用户多行数据合并为单行

问题描述

关联3张表查询后,同一用户会返回4行数据——仅meta_key和meta_value两列不同,其余字段完全一致。需要将这4行合并为1行,把不同行的meta_key对应的值转为单独的列,而非分散在多行中。

当前使用的查询语句:

SELECT
CONCAT(
    'https://example.com/?search=',
    comment_content
) AS link,
wp_comments.user_id,
user_email,
user_login,
user_nicename,
comment_date as 'Interview Date',
display_name,
user_registered,
meta_key,
meta_value
解决方案

可以用条件聚合实现行转列,通过CASE WHEN判断meta_key的值,将对应的meta_value提取为单独列,再配合GROUP BY分组合并同一用户的行。

假设你的4个meta_key分别是field_a、field_b、field_c、field_d,修改后的查询语句如下(请替换为实际的meta_key值):

SELECT
    CONCAT('https://example.com/?search=', comment_content) AS link,
    wp_comments.user_id,
    user_email,
    user_login,
    user_nicename,
    comment_date AS 'Interview Date',
    display_name,
    user_registered,
    -- 按实际meta_key替换以下字段
    MAX(CASE WHEN meta_key = 'field_a' THEN meta_value END) AS field_a,
    MAX(CASE WHEN meta_key = 'field_b' THEN meta_value END) AS field_b,
    MAX(CASE WHEN meta_key = 'field_c' THEN meta_value END) AS field_c,
    MAX(CASE WHEN meta_key = 'field_d' THEN meta_value END) AS field_d
FROM
    -- 补充你关联3张表的JOIN语句,示例:
    wp_comments
    JOIN wp_users ON wp_comments.user_id = wp_users.ID
    JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id
GROUP BY
    link,
    wp_comments.user_id,
    user_email,
    user_login,
    user_nicename,
    comment_date,
    display_name,
    user_registered;

说明

  • CASE WHEN匹配对应meta_key并提取值,MAX()用于分组后保留有效数据(同一用户对应meta_key只有一条有效记录,其余为NULL,聚合函数会过滤NULL)。
  • GROUP BY需包含所有非聚合字段(即原查询中除meta_key、meta_value外的所有字段)。
  • 若数据库支持PIVOT语法,也可使用该方式实现,但条件聚合是适配大多数数据库(MySQL、PostgreSQL、SQLite等)的通用写法。

内容的提问来源于stack exchange,提问作者Cyberian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:25:17