Sql 一个表中的记录不存在于另一个表中
我正在尝试使用左连接,不存在,不在,我想要追踪表中的记录,期望使用外键instance=id从条件表中匹配记录。当我执行查询时,它显示为空(无记录) 左连接Sql 一个表中的记录不存在于另一个表中,sql,Sql,我正在尝试使用左连接,不存在,不在,我想要追踪表中的记录,期望使用外键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
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:
这将返回条件表中不存在的追踪行我将使用
不存在
:
SELECT P.*
FROM pursuit p
WHERE NOT EXISTS (SELECT 1
FROM condition c
WHERE p.id = c.instance
);
唯一的问题是,
不存在
您还没有在它们之间建立任何关系。而且应该是这样。您的输出有什么问题?我们可以看到,对于每个追踪id(3,7,2,10,15,4),都存在一个p.id=c.instance的条件行。因此,当您使用NOT exists或NOT in时,它正确地不返回任何内容。George Menoutis-我们是否有其他方法来改进查询。您所说的“改进”是什么意思?如果你的意思是更快,那么不,它是好的,因为它是。你还需要什么吗?我不明白为什么我的问题分数是-2票。堆栈溢出只针对标准开发人员或学习者。请考虑添加期望的输出。查询正在工作。它显示了两个表中的所有记录,但我只希望pursuit table.query中的记录被编辑。。如果您只需要pursuit中的数据,只需避免joinI需要pursuit表中的记录,需要condition表中的匹配记录,因此,在这种情况下,我们需要两个表。我正在通过避免condition表中的匹配记录来从pursuit表中查找不匹配的记录。仍然不清楚:请添加具有预期输出的表
SELECT P.*
FROM pursuit p
WHERE NOT EXISTS (SELECT 1
FROM condition c
WHERE p.id = c.instance
);