查询以检查列之间的关系?

时间:2019-05-02 11:57:58

标签: mysql sql

我目前有一个名为User_Followers的表,该表包含以下列:

User_Id Follower_Id

我正在尝试建立一个查询,该查询将检索用户关注的所有人员,但不会追随其后。

例如:

User ID | Follower ID

1              2
1              4
3              1
4              2
4              3

在上面的示例中,如果我要检查是否没有跟随用户4的用户,它应该返回1。

类似地,如果我要检查是否跟随用户2的用户,则应该返回1和4

2 个答案:

答案 0 :(得分:1)

  

我正在尝试建立一个查询,该查询将检索用户关注的所有人员,但不会追随其后。

如果我理解正确,那么not exists似乎可以满足您的要求:

select uf.user_id
from User_Followers uf
where uf.follower_id = @user and
      not exists (select 1
                  from User_Followers uf2
                  where uf2.user_id = uf.follower_id and
                        uf2.follower_id = uf.user_id
                 );

答案 1 :(得分:0)

您有2个查询:

“被跟随” 可以这样写:

SELECT u.Follower_Id
FROM User_Followers u
WHERE u.User_Id = ?

“用户关注的所有人” 可以通过以下方式完成:

SELECT u.User_Id 
FROM User_Followers u
WHERE u.Follower_Id = ?

现在,您可以将两个查询结合起来执行“用户关注的所有人” ,而不执行 “被关注的人” < / p>

SELECT u.User_Id 
FROM User_Followers u
WHERE u.Follower_Id = ?
AND u.User_Id NOT IN
(
    SELECT uf.Follower_Id
    FROM User_Followers uf
    WHERE uf.User_Id = ?
)