是否可以通过加入提出此请求?

时间:2019-10-09 14:46:53

标签: sql performance join

有2个表: -用户(id,伪) -Link(id1,id2),这两列在id用户上为FK

我想选择所有没有id = 10的链接的用户。这意味着我想要User的所有id,但是只有在Link(10,id2)不存在的情况下。

我尝试使用左联接,但结果不正确

select distinct *
from USER
left join LINK on USER.id = LINK.id1
where LINK.id1 != 10

2 个答案:

答案 0 :(得分:1)

在这里存在查询似乎是最简单的:

jne

简而言之,这表示保留SELECT u.id, u.pseudo FROM User u WHERE NOT EXISTS (SELECT 1 FROM Link l WHERE (l.id1 = u.id AND l.id2 = 10) OR (l.id2 = u.id AND l.id1 = 10)); 表中的每条记录,以使该用户与User之间不存在任何关系。请注意,假设我们不知道任何用户可能落在哪一边,我在id = 10表中检查关系的两面。

答案 1 :(得分:1)

LINK.id1 = 10子句中添加条件ON,在WHERE子句中仅返回不匹配的行:

select distinct USER.* 
from USER left join LINK 
on USER.id = LINK.id1 and LINK.id1 = 10
where LINK.id1 is null

不清楚您是否只希望id1也不是10还是id2