如何筛选SQL表中同REPO下FOLLOWER存在于USER列的记录
解决方案:筛选仓库内用户关注同仓库用户的记录
嘿,我来帮你搞定这个SQL筛选需求!咱们需要从给定的数据表中,挑出同一仓库(REPO)下,用户(USER)关注的对象(FOLLOWER)本身也是该仓库注册用户的记录。
先看原始数据表:
| REPO | USER | FOLLOWER |
|---|---|---|
| A | 1 | 3 |
| A | 2 | 4 |
| A | 3 | 6 |
| B | 2 | 7 |
| B | 4 | 2 |
| C | 5 | 3 |
| C | 2 | 6 |
| C | 6 | 5 |
两种可行的SQL写法:
方法1:自连接(Self Join)
这是比较直观的方式,把表和自己做连接,匹配同一仓库下FOLLOWER等于另一条记录的USER的行:
SELECT t1.* FROM your_table t1 JOIN your_table t2 ON t1.REPO = t2.REPO AND t1.FOLLOWER = t2.USER;
方法2:EXISTS子查询
通过子查询检查当前行的FOLLOWER是否在同一仓库的USER列表中,逻辑更清晰:
SELECT * FROM your_table t WHERE EXISTS ( SELECT 1 FROM your_table WHERE REPO = t.REPO AND USER = t.FOLLOWER );
最终筛选结果:
运行上面任意一个查询,都会得到以下符合要求的记录:
| REPO | USER | FOLLOWER |
|---|---|---|
| A | 1 | 3 |
| B | 4 | 2 |
| C | 2 | 6 |
| C | 6 | 5 |
简单解释下结果:
- 仓库A里,只有用户1关注的3是该仓库的用户;
- 仓库B里,用户4关注的2是该仓库用户;
- 仓库C里,用户2关注的6、用户6关注的5都是该仓库的用户,所以这两行都被保留。
内容的提问来源于stack exchange,提问作者Jenny
相关产品推荐
相关产品推荐

