mysql - 如何匹配常见行?

标签 mysql sql select group-by having

我有一个这样的表:

// friends
+----+---------+--------+
| id | user_id | friend |
+----+---------+--------+
| 1  | 1       | Peter  |
| 2  | 1       | Martin |
| 3  | 2       | Jack   |
| 4  | 1       | Barman |
| 5  | 3       | Peter  |
| 6  | 1       | Jack   |
| 7  | 3       | David  |
| 8  | 2       | David  |
| 9  | 3       | Martin |
+----+---------+--------+

现在我有两个 user_id。例如 13。现在我想匹配有共同 friend 的行。所以这是预期的结果:

| Peter  |
| Martin |

因为 PeterMartin 对于 ids 13 都是通用的。

纯 sql 能做到吗?

最佳答案

您可以对 friends 表进行自连接,需要满足以下三个条件才能匹配连接两侧的记录:

  1. 第一个表中的 user_id1
  2. 第二个表中的user_id3
  3. 好友匹配(即双方共享)


SELECT t1.friend
FROM friends t1
INNER JOIN friends t2
    ON t1.user_id = 1 AND
       t2.user_id = 3 AND
       t1.friend = t2.friend

如果您正确设置了索引,我希望它比聚合方法运行得更快。

此处演示:

Rextester

关于mysql - 如何匹配常见行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43180330/

相关文章:

c# - Groupby 使用动态 linq

html - 包裹在选择框中 - Firefox 的问题

mysql - 使用mysql的两种分组select方法,哪个更快,哪个更好?

sql - 原则 2 使用 LIKE 进行查询

mysql - 可以在同一个 SQL 查询中使用两个 GROUP_CONCAT 吗?

mysql - 如何从表中获取评论最多的用户

mysql - MySQL 中水平选定值的逗号分隔字符串

mysql - Scrapy Pipeline 无法插入 MySQL

php - 使用 PHP 和 mysqli 从多个 MySQL 表获取数据

PHP Mysql 从多个表中选择查询