一种借助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;
相关推荐
建群新人小猿1 小时前
陀螺匠企业助手—个人简历
android·大数据·开发语言·前端·数据库
小毅&Nora1 小时前
【后端】【Redis】② Redis事务管理全解:从“购物车结算“到“银行转账“,一文彻底掌握事务机制
数据库·redis·事务
u0109272712 小时前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
玄同7653 小时前
深入理解 SQLAlchemy 的 relationship:让 ORM 关联像 Python 对象一样简单
人工智能·python·sql·conda·fastapi·pip·sqlalchemy
酉鬼女又兒3 小时前
SQL21 浙江大学用户题目回答情况
数据库·sql·mysql
KIN_DIN4 小时前
SQL 查询最新的一条记录
数据库·sql
m0_706653234 小时前
Python生成器(Generator)与Yield关键字:惰性求值之美
jvm·数据库·python
wangmengxxw4 小时前
SpringAI-mysql
java·数据库·人工智能·mysql·springai
Coder_Boy_4 小时前
基于SpringAI的在线考试系统-数据库设计核心业务方案
java·数据库·spring boot·ddd·tdd
机器视觉知识推荐、就业指导5 小时前
Qt 元对象系统:机制、组成与典型用法
数据库·qt