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

如何关联三张表并聚合第三张表中的列?

解决方案

你的需求可以通过聚合函数实现,结合表关联与去重逻辑就能得到目标结果,以下是具体实现方案:

适用多数现代数据库(PostgreSQL、SQL Server等)的SQL语句

SELECT
    a.id AS id_table_a,
    STRING_AGG(DISTINCT c.item, ', ') AS item
FROM
    "A" a
LEFT JOIN "B" b ON a.id = b.table_a
LEFT JOIN "C" c ON b.id = c.table_b
GROUP BY
    a.id
ORDER BY
    a.id;

关键逻辑说明

  1. 表关联:用LEFT JOIN保证表A的每一行都会被保留,即便没有对应的表B或表C数据(此时item字段会返回NULL);若确认表A的所有行都有关联数据,也可替换为INNER JOIN。
  2. 去重聚合:通过DISTINCT关键字在STRING_AGG中过滤重复的item(比如表C中id100对应的两条Apple记录),确保结果里每个item仅出现一次。
  3. 分组规则:按表A的id分组,实现每个表A行对应一行聚合结果。

执行结果

id_table_aitem
1Apple, Orange
2Apple, Banana, Rice

适配MySQL 5.x版本的替代语句

若使用不支持STRING_AGG的MySQL 5.x,可改用GROUP_CONCAT:

SELECT
    a.id AS id_table_a,
    GROUP_CONCAT(DISTINCT c.item SEPARATOR ', ') AS item
FROM
    `A` a
LEFT JOIN `B` b ON a.id = b.table_a
LEFT JOIN `C` c ON b.id = c.table_b
GROUP BY
    a.id
ORDER BY
    a.id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:50:26