查询彼此不是朋友的所有用户名

时间:2018-02-13 06:02:25

标签: sql

友谊数据库包含两个表,一个用于跟踪所有用户,另一个用于维护友谊关系 用户之间

CREATE TABLE users (
    ID int,
    Name varchar(255)
);

CREATE TABLE friends (
    ID1 int,
    ID2 int
);

对于每个友谊,在friends表中只有一个条目,包含两个朋友的用户中的主键。

我希望找到彼此不是朋友的所有用户的姓名

2 个答案:

答案 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,则会返回空结果集,可能会产生意外结果。

Reference