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

MySQL实现4表ID全连接(FULL JOIN)查询结果不符问题求解

问题排查
  • 关联条件逻辑错误:你写的右连接链条中,所有关联都绑定d.id作为关联键,而doc表的ID最大值为3,当关联到prof表ID=4、5的记录时,d.id已经为NULL,后续用d.id关联sing、act表的条件必然不成立,导致ID>=4的各表记录无法正确匹配。
  • 多表全连接实现逻辑错误:多表全连接不能直接通过「整链左连UNION整链右连」实现,这种写法只会保留左链的ID范围和最右表的ID范围,中间表超出ID范围的记录会全部丢失。
正确SQL语句

最简单的实现方式是先提取四个表的所有ID全集,再以ID全集为驱动表左连所有业务表,不会丢失任何ID对应的记录:

SELECT 
    d.Name AS D,
    p.Name AS P,
    s.Name AS S,
    a.Name AS A
FROM (
    -- 合并四个表所有出现过的ID并去重
    SELECT ID FROM doc
    UNION
    SELECT ID FROM prof
    UNION
    SELECT ID FROM sing
    UNION
    SELECT ID FROM act
) AS all_id
LEFT JOIN doc d ON all_id.ID = d.ID
LEFT JOIN prof p ON all_id.ID = p.ID
LEFT JOIN sing s ON all_id.ID = s.ID
LEFT JOIN act a ON all_id.ID = a.ID
ORDER BY all_id.ID;

执行后输出结果与你给出的预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:15:03