sql - 如何查找另一个表上是否存在用户关系
问题描述
我有一个名为 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 |
任何帮助,将不胜感激。
解决方案
使用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;
请注意,您不需要CASE
Postgres 中的表达式。一个布尔表达式可以是——嗯——一个布尔列。
推荐阅读
- python - Azure - 从静态网页读取本地文件
- javascript - 如何使用 Moment 将字符串转换为日期
- django - python manage.py migrate --fake
vs python manage.py migrate --fake 零 - python - 带有 sqlite3 的 Python - 运行几分钟后输入随机值
- pandas - 在情节线图中删除数千(k)
- javascript - 用 JS 将 div 注入我的网站(无法编辑主主题文件)这可能吗?
- javascript - 在 javascript 中嵌套 .then 以进行 firebase 操作
- d3.js - 如何计算 D3 中矩形之间的距离?
- selenium - 一个非常不可思议的问题,Maven变得顽皮,selenium 4.0.0-beta-1
- r - 以相同的顺序将模式的所有元素与向量匹配