我有一个自引用表,内容如下: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
提前致谢
试试这样;
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.如果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。