表dating_users
:
user_id | username
---------+----------
11 | taimoor
13 | jacob
14 | pi
(3 rows)
表dating_likes
:
like_id | user_id | liked_user
---------+---------+------------
54 | 11 | 13
56 | 13 | 11
57 | 11 | 14
(3 rows)
我想在用户喜欢某人的地方找到喜欢的人,并且有人喜欢他们。这是我的查询:
select like_id from dating_likes where user_id = 11 and exists(select like_id from dating_likes where liked_user = 11);
结果:
like_id
---------
54
57
(2 rows)
这应该只导致第一行,因为54
is a like where theuser_id = 11
和 there is a like 56
where liked_user = 11
。Like57
不应该出现,因为它不是相互的 - 真实的user_id
是 11。
这是我的解决方案
输出是这样的:
我不知道哪种解决方案(使用 Join 或 Exist)在性能方面更好,但我想知道是否有人想分享他们的意见。谢谢
将其视为必须相等的两种不同的喜欢:
a_likes_b
并且b_likes_a
是 的表别名dating_likes
。从这里我们也看到这
like_id
是没有意义的,可以省略。(user_id,liked_user)
是一个足够的主键。