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

如何选择指定行及其所有关联行?SQL查询问题求助

问题分析与解决方案

让我来帮你拆解下这个查询的问题,以及给出符合需求的写法~

为什么你的查询只返回一行?

你的语句是:

select m1.* from mytable m1 left join mytable m2 on m1.id = m2.related where m1.id = 1

核心问题在这里:where m1.id = 1直接限定了仅从m1表中选取id=1的行。虽然你做了左连接,m2表中related=1的行(也就是id=2的那行)会被关联到m1的行上,但你最终只选择了m1.*——也就是主表m1的字段,所以结果自然只有id=1的那一行,完全没涉及到m2表中的数据。

正确的查询写法

方法1:用OR条件直接筛选(最简洁)

如果你的需求就是获取id=1的行,加上所有related=1的行,最直观的写法是用WHERE条件组合:

SELECT * FROM mytable 
WHERE id = 1 OR related = 1;

执行这个语句就能同时返回id=1和id=2的两行,完美匹配你的需求。

方法2:用UNION合并结果(适合复杂场景)

如果后续需要针对两种情况分别做更复杂的筛选,可以用UNION把两个独立查询的结果合并:

SELECT * FROM mytable WHERE id = 1
UNION
SELECT * FROM mytable WHERE related = 1;

⚠️ 注意:UNION会自动去除重复行(比如如果某行同时满足id=1和related=1),如果需要保留重复,改用UNION ALL即可。

额外说明:如果是递归层级的关联?

如果你的表是树形结构,需要获取id=1的所有子节点(包括更深层级),那就要用递归查询(比如MySQL的WITH RECURSIVE,PostgreSQL的递归CTE),但从你给出的数据来看,目前只是两层关联,上面的两种方法就足够啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:21:20