MySQL:获取所有组合

jaxagkaj  于 2023-01-12  发布在  Mysql
关注(0)|答案(1)|浏览(135)

假设我有一个用户表 * users *:
| 用户标识|姓名|
| - ------|- ------|
| 1个|鲍勃|
| 第二章|亚当|
| 三个|查理|
现在,我希望获得一个或两个用户的所有组合:
| 用户1|用户2|
| - ------|- ------|
| 鲍勃|零|
| 鲍勃|亚当|
| 鲍勃|查理|
| 亚当|零|
| 亚当|鲍勃|
| 亚当|查理|
| 查理|零|
| 查理|鲍勃|
| 查理|亚当|
假设我只想得到两个人的组合,我可以简单地做这样的事情:

SELECT * FROM users u1 
LEFT JOIN users u2 on u1.id!=u2.id

但是,我想包含只有一个用户的组合,如何才能得到想要的结果?

nukf8bse

nukf8bse1#

使用自定义CROSS JOIN

SELECT u1.name AS user1,
       NULLIF(u2.name, u1.name) AS user2
FROM users u1 CROSS JOIN users u2
ORDER BY u1.user_id, NULLIF(u2.user_id, u1.user_id);

请参见demo

相关问题