有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
答案 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
。