SQL如何通过自连接获取表中某列的所有唯一两两组合对
解决方案
你需要的是表的自笛卡尔积,直接对表做无关联条件的自连接即可实现需求。
假设你的表名为test_tbl,第一列字段名为id,第二列字段名为category,通用SQL语句如下:
SELECT t1.id, t2.id, t1.category FROM test_tbl t1 CROSS JOIN test_tbl t2 -- 部分不支持CROSS JOIN语法的数据库可以用如下写法,效果完全一致: -- SELECT t1.id, t2.id, t1.category FROM test_tbl t1, test_tbl t2
输出效果
针对你给出的样例数据,执行后会返回9条全排列结果,完全匹配你给出的预期输出:
1 1 A 1 2 A 1 3 A 2 1 A 2 2 A 2 3 A 3 1 A 3 2 A 3 3 A
可选调整规则
- 不需要id和自身的配对(即排除
1 1 A、2 2 A这类结果),可以追加WHERE条件:WHERE t1.id != t2.id - 只需要组合不需要排列(即
1 2 A和2 1 A只保留一条),可以追加WHERE条件:WHERE t1.id < t2.id
内容的提问来源于stack exchange,提问作者Mr_BananaPants
相关产品推荐
相关产品推荐

