友谊数据库包含两个表,一个用于跟踪所有用户,另一个用于维护友谊关系 用户之间
CREATE TABLE users (
ID int,
Name varchar(255)
);
CREATE TABLE friends (
ID1 int,
ID2 int
);
对于每个友谊,在friends表中只有一个条目,包含两个朋友的用户中的主键。
我希望找到彼此不是朋友的所有用户的姓名
答案 0 :(得分:1)
http://sqlfiddle.com/#!9/66511e/1
select users1.Name, users2.Name from users As users1 inner join users As users2
on users1.id > users2.id
where not exists
(select * from friends
where (friends.id1 = users1.id and friends.id2 = users2.id)
or(friends.id2 = users1.id and friends.id1 = users2.id))
答案 1 :(得分:0)
select * from users where id not in (
select id1 from friends
union all
select id2 from friends
) a
我认为您在NULL
表中没有friends
个条目,这很重要,因为:
但是,如果右侧表格在
NULL
过滤的值中包含NOT IN
,则会返回空结果集,可能会产生意外结果。