显示语句 sql 的补码结果

Show complement results from statement sql

我有一个类似 twiter 的网站,用户可以在其中关注另一个用户,我需要向他们展示关注新人的建议

TABLE USERS

user id_user
A       1
B       2
C       3
D       4
E       5
F       6

TABLE COMMUNITY

id_follower id_followed
3               4
3               5
3               6

3 (C) 跟随 4,5,6 (D,E,F)

我得到了显示关注用户的语句,4,5,6 (D,E,F):

SELECT user,id_followed
  FROM users,community
    WHERE users.id_user=community.id_followed AND community.id_follower=3
        GROUP BY user

如何显示后跟 C(3) 的用户,换句话说,1,2 (A,B)

我需要EXCEPT吗? LEFT OUTER JOIN

SELECT id_followed
   FROM community
    EXCEPT
      (
        SELECT user,id_followed
           FROM users,community
                WHERE users.id_user=community.id_followed AND community.id_follower=3
        GROUP BY user
     )

    RETRIEVE ERROR.

你可以使用 NOT EXISTS

SELECT *
   FROM users u
WHERE NOT EXISTS
      (
        SELECT *
           FROM community c
                WHERE c.id_follower=3
            AND ( u.id_user = c.id_followed or u.id_user = c.id_follower)
     )

sql fiddle

简单的方法就是使用minus operator。它看起来像:

SELECT id_user
 FROM users
MINUS
SELECT id_followed
 FROM community
 WHERE community.id_follower=3

你想做的事情可以通过使用 "not in" 子句来实现 尝试以下查询来实现您的目标

SELECT * 
FROM 
   users
WHERE 
   id_user not in 
        (SELECT 
            id_followed 
         FROM 
            community 
        WHERE 
            id_follower = 3)
AND 
    id_user <> 3