mysql - 根据相互喜欢连接MySQL中的两个表

标签 mysql sql join

好的,我有两个 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/

相关文章:

mysql - 将 NULL 值插入 MySQL,来自 Coldfusion

PHP复制和删除文件并从数据库中删除记录

php - MYSQL IF 语句到不同的 WHERE 子句

python - Django 中菜单和子菜单的递归函数,直到最后一个子菜单出现

php - 如何使用 PHP 在 MySQL 上使用随机或随机数据?

mysql - mysql插入的格式化日期

sql - 为什么 LINQ to Entities 为我创建子查询?

mysql - 在单个 sql 查询中一起使用 JOIN 和 group by

c# - LINQ 中的条件连接

Android:将多部分文件连接在一起以制作单个文件