在匹配的行上使用递归联接进行选择

时间:2019-10-09 20:47:02

标签: mysql

给出

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 的朋友(即,约翰和皮特)。结果,仅应返回行ID #5,因为John和Pete只有一个共同的朋友- Rock

我的尝试

这不会产生结果:

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

2 个答案:

答案 0 :(得分:2)

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

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

DEMO

答案 1 :(得分:0)

您需要获取 John 的朋友和 Pete 的朋友,然后将结果与“朋友”列关联。

SELECT
    f1.*
FROM
    friends f1,
    friends f2
WHERE
    f1.user = 'John' AND f2.user = 'Pete' AND f1.friend=f2.friend