如何获取单列的所有组合?自连接方案未生效求解决
解决SQL获取列所有组合的问题
先明确场景数据
你的表table1数据如下:
| column1 | column2 |
|---|---|
| value | 145 |
| value | 146 |
| value2 | 13 |
| value2 | 56 |
| value2 | 364 |
原语句的问题
你写的SELECT a.column1 FROM table1 a CROSS JOIN table1 b where column1="value"有两个核心问题:
where条件里的column1未指定属于表别名a还是b,会引发歧义,导致数据库无法正确筛选- 仅查询
a.column1,就算笛卡尔积生效,也只会重复输出value,完全体现不出“组合”的效果
可行解决方案
根据你要“展示某一列的所有组合”的需求,分场景给出方案:
场景1:获取指定column1分组下,column2的所有两两组合
比如要获取column1='value'对应的所有column2值的两两配对:
SELECT a.column2 AS col2_left, b.column2 AS col2_right FROM table1 a CROSS JOIN table1 b WHERE a.column1 = 'value' AND b.column1 = 'value' -- 若要排除自身配对和重复组合(比如(145,146)和(146,145)视为同一组合),可追加条件: -- AND a.column2 < b.column2
执行无追加条件的语句会返回:
col2_left | col2_right ----------|----------- 145 | 145 145 | 146 146 | 145 146 | 146
追加AND a.column2 < b.column2后,会得到去重的唯一组合:
col2_left | col2_right ----------|----------- 145 | 146
场景2:获取column1的所有两两组合
如果要的是column1中所有值的跨分组配对:
SELECT DISTINCT a.column1 AS col1_left, b.column1 AS col1_right FROM table1 a CROSS JOIN table1 b -- 同样,要排除重复组合可追加:AND a.column1 < b.column1
执行后返回:
col1_left | col1_right ----------|----------- value | value value | value2 value2 | value value2 | value2
场景3:获取两列的所有唯一配对组合
如果要的是表中column1和column2的所有不重复组合:
SELECT DISTINCT column1, column2 FROM table1
直接返回所有唯一的列值配对:
column1 | column2 --------|-------- value | 145 value | 146 value2 | 13 value2 | 56 value2 | 364
内容的提问来源于stack exchange,提问作者ls440
相关产品推荐
相关产品推荐

