如何合并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
相关产品推荐
相关产品推荐

