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

问题描述 投票:3回答:3

我有一个自引用表,内容如下:Demo here自引用父表

 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语句对于:(没有任何关系的empid)

emp_id
-----
9
10
11

Demo here

提前致谢

sql sql-server database oracle
3个回答
2
投票

试试这样;

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

0
投票

您可以使用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

0
投票

你可以处理两条规则 - 1.如果emp_id列中存在man_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。

© www.soinside.com 2019 - 2024. All rights reserved.