好的,我有两个 MySQL 表;一个称为用户
,另一个称为喜欢
。
用户表
id name
----- ------
1 Mark
2 John
3 Paul
4 Dave
5 Chris
喜欢表
liked_by liked match_id
----- ------ --------
1 2 1
2 1 2
1 3 3
2 3 4
1 5 5
5 1 6
我能够成功连接两个表,如下
SELECT users.id, likes.*
FROM users
JOIN likes
ON users.id = likes.liked
但是,我不确定如何格式化 WHERE
子句以便返回以下行。
name liked_by liked match_id
------ ------- -------- --------
Mark 1 3 3
John 2 3 4
如您所见,我正在尝试返回 Mark 和 John 都喜欢同一用户的行。在本例中,它是用户 3,即 Paul。我尝试将以下子句添加到查询中,但显然不起作用。
WHERE (likes.liked_by = '1' OR likes.liked_by = '2')
最佳答案
查找具有多行的点赞(点赞?)。否则它只是一个内部联接:
select *
from Likes as l inner join Users as u on u.id = l.liked_by
where liked in (
select liked
from Likes
--where liked_by in (:userid1, :userid2) /* optional: specific pair of users */
--where liked (:userid1, :userid2) /* optional: specific likee */
group by liked
having count(*) > 1
)
我经常听到 in
子查询在 MySQL 上优化不佳。由于分组将保证一对一的关系,因此很容易将其转换为派生表/内联 View /嵌套 View 或任何你们所说的内部联接。
关于mysql - 根据相互喜欢连接MySQL中的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29003244/