一种借助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;
相关推荐
赤橙红的黄2 分钟前
自定义线程池-实现任务0丢失的处理策略
数据库·spring
钢铁男儿4 分钟前
C# 委托(调用带引用参数的委托)
java·mysql·c#
叁沐30 分钟前
MySQL 02 日志系统:一条SQL更新语句是如何执行的?
mysql
DataGear34 分钟前
如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板
javascript·数据库·sql·信息可视化·数据分析·echarts·数据可视化
RunsenLIu38 分钟前
基于Vue.js + Node.js + MySQL实现的图书销售管理系统
vue.js·mysql·node.js
码不停蹄的玄黓1 小时前
MySQL Undo Log 深度解析:事务回滚与MVCC的核心功臣
数据库·mysql·undo log·回滚日志
Qdgr_1 小时前
价值实证:数字化转型标杆案例深度解析
大数据·数据库·人工智能
数据狐(DataFox)1 小时前
SQL参数化查询:防注入与计划缓存的双重优势
数据库·sql·缓存
Arthurmoo1 小时前
Linux系统之MySQL数据库基础
linux·数据库·mysql
博观而约取1 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django