需求说明
有如下表和数据:
N | name |
1 | 户口 |
2 | 查询机构数过多 |
3 | 危险驾驶 |
4 | 多头用信 |
需要输出name里的所有组合情况,即单个值,两两组合,三个组合、四个组合。结果为2的n次方-1中情况,这里是15。
预期结果为:
Combination |
危险驾驶 |
多头用信 |
户口 |
查询机构数过多 |
危险驾驶,多头用信 |
户口,危险驾驶 |
户口,多头用信 |
户口,查询机构数过多 |
查询机构数过多,危险驾驶 |
查询机构数过多,多头用信 |
户口,危险驾驶,多头用信 |
户口,查询机构数过多,危险驾驶 |
户口,查询机构数过多,多头用信 |
查询机构数过多,危险驾驶,多头用信 |
户口,查询机构数过多,危险驾驶,多头用信 |
解决方法
WITH RECURSIVE Recur(N,Combination) AS (
SELECT N, name
FROM (
SELECT id N,name FROM rejectdetail
) num
UNION ALL
SELECT n.N,CONCAT(r.Combination , ',',name)
FROM Recur r
INNER JOIN (
SELECT id N,name FROM rejectdetail
) n ON n.N > r.N)
SELECT Combination -- ,CONCAT("'",REPLACE(Combination,',',"','"),"'") Combination_New
FROM Recur
ORDER BY LENGTH(Combination)-LENGTH(REPLACE(Combination,',','')),Combination;