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

如何合并MySQL中两单条记录表与一多条记录表的查询结果?

解决方案

首先要修正你的表结构问题:你给c表设置了id为主键,但主键要求唯一性,所以无法插入多条id=1的记录,实际执行INSERT语句会报错。需要先调整c表结构,比如添加自增主键:

-- 修改c表,移除原主键并添加自增主键
ALTER TABLE c DROP PRIMARY KEY;
ALTER TABLE c ADD COLUMN c_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY;

或者重新创建正确的c表:

CREATE TABLE c (
 c_id int unsigned NOT NULL AUTO_INCREMENT,
 id int unsigned NOT NULL,
 status varchar(10) default null,
 PRIMARY KEY (c_id),
 KEY idx_id (id)
);

接下来,要将c表中同一id的多条status合并到一行,可以使用GROUP_CONCAT()函数,配合GROUP BY聚合结果:

SELECT 
    a.id,
    a.name,
    b.addr,
    GROUP_CONCAT(c.status SEPARATOR ' ') AS status_list
FROM a
INNER JOIN b USING (id)
LEFT JOIN c USING (id)
WHERE a.id = 1
GROUP BY a.id, a.name, b.addr;

执行该查询后,会得到你期望的结果:

1  bob  abc  x y z

补充说明

  • GROUP_CONCAT()默认用逗号分隔内容,通过SEPARATOR ' '可以指定用空格分隔
  • 如果合并后的字符串长度超出默认限制,可以通过调整group_concat_max_len参数来支持更长的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:50:39