一种借助MYSQL递归CTE生成所有组合情况的实现方法

需求说明

有如下表和数据:

|---|---------|
| N | name |
| 1 | 户口 |
| 2 | 查询机构数过多 |
| 3 | 危险驾驶 |
| 4 | 多头用信 |

需要输出name里的所有组合情况,即单个值,两两组合,三个组合、四个组合。结果为2的n次方-1中情况,这里是15。

预期结果为:

|----------------------|
| Combination |
| 危险驾驶 |
| 多头用信 |
| 户口 |
| 查询机构数过多 |
| 危险驾驶,多头用信 |
| 户口,危险驾驶 |
| 户口,多头用信 |
| 户口,查询机构数过多 |
| 查询机构数过多,危险驾驶 |
| 查询机构数过多,多头用信 |
| 户口,危险驾驶,多头用信 |
| 户口,查询机构数过多,危险驾驶 |
| 户口,查询机构数过多,多头用信 |
| 查询机构数过多,危险驾驶,多头用信 |
| 户口,查询机构数过多,危险驾驶,多头用信 |

解决方法

sql 复制代码
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;
相关推荐
xianjian09121 小时前
MySQL 的 INSERT(插入数据)详解
android·数据库·mysql
知识分享小能手1 小时前
MongoDB入门学习教程,从入门到精通,MongoDB入门指南 —— 知识点详解(2)
数据库·学习·mongodb
what_20182 小时前
PostgreSQL 索引
数据库·postgresql
麦聪聊数据2 小时前
跨云与多区服游戏架构下的数据库运维:基于webSQL的访问实践
数据库·sql·低代码·游戏·restful
eggwyw2 小时前
MySQL 与 Redis 的数据一致性问题
数据库·redis·mysql
2401_879693872 小时前
使用Python控制Arduino或树莓派
jvm·数据库·python
秦jh_3 小时前
【Redis】Set和Zset
数据库·redis·缓存
what_20183 小时前
PostgreSQL 时间
数据库·postgresql
Nyarlathotep01133 小时前
Redis的数据结构(4):跳表
数据库·redis