我正在尝试使用LEFT JOIN,NOT EXISTS和NOT IN,在这些地方我想要追踪表中的记录,期望使用外键instance = id从条件表中获得匹配的记录。当我执行查询时,它显示为空(无记录)。
左加入
SELECT p.id, p.dept
FROM
pursuit p LEFT JOIN condition c USING (dept)
WHERE
p.id = c.instance
不存在
SELECT p.id, p.dept
FROM
pursuit p
WHERE
p.id NOT EXISTS IN (SELECT c.instance FROM condiiton c)
禁止进入
SELECT p.id, p.dept
FROM
pursuit p
WHERE
p.id NOT IN (SELECT c.instance FROM condiiton c)
表格
condition
id instance dept
1 3 5
5 2 5
2 7 5
3 4 5
4 10 5
5 2 3
6 15 6
pursuit
id name dept
3 C1 5
2 C9 5
7 C77 5
4 C9 5
10 C6 5
19 C23 5
17 C45 5
15 C12 5
23 C33 5
3,2,7,4 =部门5的匹配记录
19,17,15,23 =部门5的记录不匹配
输出
id name dept
19 C23 5
17 C45 5
15 C12 5
23 C33 5
答案 0 :(得分:0)
Edit2:
SELECT p.id, p.dept
FROM pursuit p LEFT JOIN condition c
on (p.id = c.instance and p.dep=c.dep)
WHERE c.instance IS NULL
这将返回条件表中不存在的追踪行
答案 1 :(得分:0)
我改用NOT EXISTS
:
SELECT P.*
FROM pursuit p
WHERE NOT EXISTS (SELECT 1
FROM condition c
WHERE p.id = c.instance
);
唯一的问题是NOT EXISTS
尚未建立它们之间的任何关系。