首页 > 解决方案 > 如何查找另一个表上是否存在用户关系

问题描述

我有一个名为 users 的表和另一个名为 relationship 的表,其中有一列包含两个 userId。如果用户与另一个用户有关系,我想找到一个输出(对于这个例子,它是一个 userId = 2 的用户)。如果他们确实有关系,我希望我的输出为真,否则为假。我遇到了一些麻烦,想知道是否有人可以帮助我。

我试过这样的事情:

SELECT DISTINCT 
        userid,
        CASE WHEN user_one_id = '2' THEN true ELSE false END AS has_user_two 
FROM users 
  LEFT JOIN relationship ON userid = user_two_id;

但是,我得到了重复...

我的查询输出错误

userid  | has_user_two| 
---------------------+
1       | true        | 
1       | false       | 
2       | false       | 
3       | false       | 
4       | true        | 
5       | true        | 

用户

   userid
-----------
 1
 2
 3
 4
 5

关系

user_one_id| user_two_id
-----------+-------------
 1         | 1
 3         | 1
 3         | 2

我的输出应该看起来像......

userid  | has_user_two| 
---------------------+
1       | true        | 
2       | false       | 
3       | false       | 
4       | false       | 
5       | false       | 

任何帮助,将不胜感激。

标签: sqlpostgresql

解决方案


使用EXISTS

SELECT u.userid,
       (EXISTS (SELECT 1
                FROM relationship r
                WHERE r.user_one_id = 2 AND r.user_two_id = u.userid
               )
       ) as has_user_two
FROM users u;

请注意,您不需要CASEPostgres 中的表达式。一个布尔表达式可以是——嗯——一个布尔列。


推荐阅读