一种借助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;
相关推荐
Csvn7 小时前
📊 SQL 入门 Day 10:递归 CTE — 破解无限层级查询的终极武器
后端·sql
吠品7 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
SelectDB8 小时前
Apache Doris Variant 动态 JSON 实战教程:从建表到跑通 100M Agent 日志查询
数据库
sg_knight8 小时前
MySQL 存储过程详解:从入门到实战
android·数据库·mysql·database·dba·关系型数据库·db
星空露珠9 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
踏月的造梦星球10 小时前
DM8 DSC 单机双实例部署
运维·开发语言·数据库
Database_Cool_10 小时前
企业级多模态分析计算引擎选型:首选 AnalyticDB MySQL 向量 + SQL + 实时一体化方案
数据库·sql·mysql
SelectDB10 小时前
从 Oracle、Hadoop 到 Apache Doris:哥瑞利泛半导体智能制造数据平台实践
数据库
ihuyigui10 小时前
海外签收通知短信接口
android·java·开发语言·前端·数据库·后端
海棠Flower未眠10 小时前
SpringBoot 消息死信队列(荣耀典藏版)
java·数据库·spring boot