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

SQL三表JOIN问题:需1个关联在子查询内1个在外,查询仅首JOIN生效

问题排查

你写的查询存在两个核心问题:

  • 选择列表中没有添加product表的product_name、category字段,即使JOIN逻辑正常执行,结果集也不会返回product相关数据,会让你误以为第二个JOIN没生效
  • 两个LEFT JOIN都写在了主查询层级,不符合要求的「1次JOIN在子查询内部、1次在子查询外部」的规则

正确实现

我们可以先在子查询内部完成sales表和product表的JOIN,拿到sales全字段+product需要的两个字段,再在主查询中完成和customer表的JOIN,刚好符合要求:

SELECT 
    temp.*,
    b.customer_name,
    b.age
FROM (
    -- 子查询内部完成第一次JOIN
    SELECT 
        a.*,
        c.product_name,
        c.category
    FROM sales AS a
    LEFT JOIN product AS c 
    ON a.product_id = c.product_id
) AS temp
-- 子查询外部完成第二次JOIN
LEFT JOIN customer AS b 
ON temp.customer_id = b.customer_id
ORDER BY temp.customer_id;

如果要保留原逻辑的关联顺序,也可以把子查询换成customer和sales先关联,主查询再关联product,只要保证一次JOIN在子查询内即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 16:21:03