获取没有子项的所有记录,并且未将任何父项映射到自引用表中?-.SQL



我有一个自引用表,内容如下:在这里演示自引用父表

 emp_id man_id(FK of emp_id or ParentID)
    ---------------------
    1   (null)
    2   (null)
    3   (null)
    4   2
    5   2
    6   3
    7   3
    8   1
    9   (null)
    10  (null)
    11  (null)

帮助我 SQL 语句 对于没有任何关系的:(emp_id(

emp_id
-----
9
10
11

在这里演示

提前致谢

尝试这样做;

select e.emp_id from emp e where 
e.man_id is null and e.emp_id 
not in (select distinct man_id from emp where man_id is not null) 

另一种选择是使用 left join ;

select e.emp_id from emp e 
left join emp e2 ON e.emp_id = e2.man_id 
where e2.man_id is null and e.man_id is null

您可以使用LEFT JOIN查找未引用为man_id

   select e.emp_id, e.man_id from emp e
   left outer join emp e1 on e1.man_id = e.emp_id
   where e1.emp_id is null

如果还想约束结果以使emp_id没有man_id,则可以执行以下操作:

   select e.emp_id, e.man_id from emp e
   left outer join emp e1 on e1.man_id = e.emp_id
   where e1.emp_id is null and e.man_id is null
你可以注意

两个规则 -
1.如果man_id列中存在emp_id,则应将其从结果
中排除2. 如果emp_id映射了一些man_id,则应将其从结果中排除

这可以使用自身上的左联接来完成。

SELECT A.EMP_ID
FROM
EMP A LEFT JOIN EMP B
ON A.EMP_ID = B.MAN_ID
WHERE A.MAN_ID IS NULL AND B.MAN_ID IS NULL;

第一个WHERE条件将处理规则 1,第二个条件WHERE将处理规则 2。

最新更新