【问题标题】:Show complement results from statement sql显示语句 sql 的补码结果
【发布时间】:2018-02-15 17:41:11
【问题描述】:

我有一个类似推特的网络,用户在其中关注其他用户,我需要向他们展示关注新人的建议

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.

【问题讨论】:

    标签: sql left-join outer-join except


    【解决方案1】:

    你可以使用不存在

    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

    【讨论】:

    • 我尝试了所有答案,我认为所有答案都是正确的,但你的工作完美!谢谢;)
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-14
        • 1970-01-01
        • 2013-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-23
        相关资源
        最近更新 更多