一个表中的记录不存在于另一表中

时间:2018-07-09 08:15:18

标签: sql

我正在尝试使用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

2 个答案:

答案 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尚未建立它们之间的任何关系。