You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python查询SQLite数据库找出两两互识的三位用户?

找出SQLite数据库中两两互识的三位用户

现有名为social_links的SQLite数据库,其中列A代表认识列B的用户,数据如下:

A B
1 2
1 3
1 4
2 3
2 5
4 2
5 3
5 4

需要编写SQL查询语句,找出所有两两互识的三位用户(即任意两人之间都存在互相认识的关系:比如用户1认识2,2也认识1;1认识3,3也认识1;2认识3,3也认识2),最终将结果以指定格式的Pandas DataFrame展示。

补全后的SQL查询语句及完整代码

核心思路是通过多次自连接验证两两双向好友关系,同时用用户ID排序避免重复组合:

import sqlite3
import pandas as pd

# 连接数据库
conn = sqlite3.connect('social_links.db')
c = conn.cursor()

# 补全的SQL查询语句
3users_query = '''
SELECT DISTINCT u1.A, u2.A, u3.A
FROM social_links u1
JOIN social_links u2 ON u1.A < u2.A 
    AND EXISTS (SELECT 1 FROM social_links WHERE A = u2.A AND B = u1.A)
JOIN social_links u3 ON u2.A < u3.A
    AND EXISTS (SELECT 1 FROM social_links WHERE A = u3.A AND B = u1.A)
    AND EXISTS (SELECT 1 FROM social_links WHERE A = u3.A AND B = u2.A)
    AND EXISTS (SELECT 1 FROM social_links WHERE A = u1.A AND B = u3.A)
    AND EXISTS (SELECT 1 FROM social_links WHERE A = u2.A AND B = u3.A)
'''

c.execute(3users_query)
dfUsersKnown = pd.DataFrame(c.fetchall(), columns=['A', 'B', 'C'])
print(dfUsersKnown)

# 关闭连接
conn.close()

语句逻辑说明

  • u1.A < u2.A < u3.A确保每组用户ID按升序排列,避免(1,2,3)和(2,1,3)这类重复组合;
  • 每个EXISTS子句验证双向好友关系:比如EXISTS (SELECT 1 FROM social_links WHERE A = u2.A AND B = u1.A)用来确认u2也认识u1,结合u1认识u2的初始记录,完成两人互识的验证;
  • DISTINCT进一步过滤可能的重复结果,确保输出唯一组合。

执行后输出的DataFrame格式如下:

A  B  C
0  1  2  3
1  1  2  4
2  2  3  5
3  2  4  5

内容的提问来源于stack exchange,提问作者schizetia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 11:10:13