我有一个自引用表,内容如下:在这里演示自引用父表
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。