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

PostgreSQL:如何筛选同表中无子行关联的记录?

在PostgreSQL中筛选无子女行的记录

要从同一张表中筛选出不存在子行的记录(子行的parent字段指向父行的id),可以通过以下几种方式实现:

示例数据

idvalueparent
1v1null
2v2null
3v31

期望结果

返回id为2和3的记录:

  • id=1存在子行(id=3的parent为1),因此被排除
  • id=2无任何子行,符合条件
  • id=3自身没有子行,符合条件

实现方法

方法1:使用NOT EXISTS子查询

这是直观且性能较好的方式,直接检查当前记录是否没有对应的子行:

SELECT t1.*
FROM your_table t1
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.parent = t1.id
);

方法2:使用LEFT JOIN + IS NULL

通过自连接左表和右表,筛选出没有匹配子行的记录:

SELECT t1.*
FROM your_table t1
LEFT JOIN your_table t2 ON t2.parent = t1.id
WHERE t2.id IS NULL;

两种方法都能得到符合期望的结果,其中NOT EXISTS在处理大数据量时通常表现更优,因为它会在找到第一个匹配项后立即停止检查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:30:59