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的朋友(即 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
解决方案
SELECT t1.*
FROM friends AS t1
JOIN friends AS t2 ON t1.friend = t2.friend
WHERE t1.user = 'Pete' AND t2.user = 'John'
由于您想要共同的朋友,因此加入条件应指定两个用户的朋友相同。
推荐阅读
- crystal-reports - 当日 + N 天
- javascript - 搜索 ZipCode 网站 - 仅在第二次点击时才会出现结果
- android - android- 使用 customAction 调用 Activity
- css - CSS 响应式网格布局:grid-column span 打破 minmax
- angular - 是否仍应使用 Angular 设置 href 属性?
- scheme - 在方案中,是否有类似 apropos 命令的东西?
- sql - SQL 从滚动 ID 生成唯一 ID
- javascript - 如何将服务器端生成的新页面加载到 PhoneGap 或 Cordova 应用程序中?
- r - R falsely identifying abundance data as presence/absence data (fossil package)
- java - 用 replaceAll 删除部分字符串