MySQL如何获取用户表的单人及两人所有组合?
获取单人及两人的所有用户组合
现有用户表(users)
| user_id | name |
|---|---|
| 1 | Bob |
| 2 | Adam |
| 3 | Charlie |
目标结果
| user1 | user2 |
|---|---|
| Bob | NULL |
| Bob | Adam |
| Bob | Charlie |
| Adam | NULL |
| Adam | Bob |
| Adam | Charlie |
| Charlie | NULL |
| Charlie | Bob |
| Charlie | Adam |
实现代码
原有的自连接语句只能得到两人组合,要包含单人(user2为NULL)的情况,直接用UNION ALL把单人组合和两人组合合并即可:
-- 生成所有单人组合(user2 为 NULL) SELECT u1.name AS user1, NULL AS user2 FROM users u1 UNION ALL -- 生成所有两人组合(user1 和 user2 不是同一个用户) SELECT u1.name AS user1, u2.name AS user2 FROM users u1 JOIN users u2 ON u1.user_id != u2.user_id
说明
- 第一部分查询会为每个用户生成一条
user2为NULL的记录,对应单人组合; - 第二部分通过自连接筛选出所有
user_id不同的用户对,得到所有两人组合; - 使用
UNION ALL而非UNION是因为两部分结果没有重复,无需去重,效率更高。
内容的提问来源于stack exchange,提问作者Thomas S
相关产品推荐
相关产品推荐

