Query
選擇與存在結合的位置
表
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 like56
whereliked_user = 11
。Like57
不應該出現,因為它不是相互的 - 真實的user_id
是 11。
將其視為必須相等的兩種不同的喜歡:
select b_likes_a.liked_user from dating_likes a_likes_b join dating_likes b_likes_a on a_likes_b.user_id = b_likes_a.liked_user and a_likes_b.liked_user = b_likes_a.user_id where a_likes_b.user_id = 11
a_likes_b
並且b_likes_a
是 的表別名dating_likes
。從這裡我們也看到這
like_id
是沒有意義的,可以省略。(user_id,liked_user)
是一個足夠的主鍵。
這是我的解決方案
select t.* from dating_likes t where exists (select t1.like_id,t1.user_id from dating_likes t1 where t.user_id = t1.liked_user and t.liked_user = t1.user_id)
輸出是這樣的:
like_id User_id Liked_user 56 13 11 54 11 13
我不知道哪種解決方案(使用 Join 或 Exist)在性能方面更好,但我想知道是否有人想分享他們的意見。謝謝