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

如何在MySQL LEFT JOIN时保留主表的原始行?

如何在LEFT JOIN其他表时保留主表的根行?

要实现保留主表原始根行+关联表匹配行的效果,直接用UNION ALL把主表的基础行和LEFT JOIN的结果合并就行,具体写法如下:

解决方案:UNION ALL合并主表行与关联结果

核心就是先单独取出主表的行(关联表字段设为NULL),再把它和原LEFT JOIN的结果拼起来,这样既能保留主表的根行,又能拿到所有关联匹配的行。

完整SQL语句

-- 取出主表的根行,关联表字段设为NULL
SELECT table1.id, table1.column1, NULL AS table_id, NULL AS column2
FROM table1
UNION ALL
-- 执行LEFT JOIN获取关联后的行,过滤掉主表无匹配时的NULL行(避免重复)
SELECT table1.id, table1.column1, table2.table_id, table2.column2
FROM table1
LEFT JOIN table2 ON table1.id = table2.table_id
WHERE table2.table_id IS NOT NULL;

执行结果

运行上面的语句后,就能得到你想要的结果:

IDColumn 1table_idColumn 2
1Foonullnull(该行需保留,因为这是父行)
1Foo1Foo bar
1Foo1John Doe

原查询的问题

你原来的LEFT JOIN语句,只有当主表没有匹配的关联数据时,才会返回主表行+NULL的结果。一旦主表有匹配的关联数据,LEFT JOIN只会返回主表行和关联表行的组合,不会单独保留主表的原始根行,这就是为什么得不到预期结果的原因。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:53:08