首页 > 解决方案 > 在匹配行上使用递归连接选择

问题描述

给定

friends- 用户及其朋友的列表:

 id | user  | friend |
----+-------+--------+
  1 | John  | Pete   |
  2 | John  | Rock   |
  3 | Pete  | Steve  |
  4 | Pete  | Liz    |
  5 | Pete  | Rock   |
  6 | Bob   | Pete   |

问题

我需要一个查询,它只获取John的朋友Pete的朋友,这些朋友是John的朋友(即 John 和 Pete 的共同朋友)因此,应该只返回行 ID,因为 John 和 Pete 只有一个共同的朋友 - Rock#5

我的尝试

这不会产生任何结果:

select T1.* FROM friends T1
INNER JOIN friends T2 ON T2.user=T1.friend
WHERE T1.user='John' AND T1.friend_id='Pete' AND T2.friend=T1.friend

标签: mysql

解决方案


SELECT t1.*
FROM friends AS t1
JOIN friends AS t2 ON t1.friend = t2.friend
WHERE t1.user = 'Pete' AND t2.user = 'John'

由于您想要共同的朋友,因此加入条件应指定两个用户的朋友相同。

演示


推荐阅读