我有一个这样的表:
// 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。例如 1
和 3
。现在我想匹配有共同 friend 的行。所以这是预期的结果:
| Peter |
| Martin |
因为 Peter
和 Martin
对于 ids 1
和 3
都是通用的。
纯 sql 能做到吗?
最佳答案
您可以对 friends
表进行自连接,需要满足以下三个条件才能匹配连接两侧的记录:
- 第一个表中的
user_id
是1
- 第二个表中的
user_id
是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/