mysql排列组合实现_排列组合的实现

本文介绍了在SQL SERVER2008R2环境下,如何通过两种方法实现1,2,3数字的排列组合。方法一利用全外连接和左连接,方法二借助CTE递归。每种方法都有其特点和适用场景。" 126508959,14979601,神经网络设计与优化:深度学习的优势与挑战,"['人工智能', '神经网络', '深度学习', '遗传算法', '模糊系统']
摘要由CSDN通过智能技术生成

数据库环境:SQL SERVER2008R2

先说一下需求:实现1,2,3的排列组合,即123,132,213,231,312,321。

哈哈,你没看错,需求这是这么短短的一句话。

我想到了2个方法,都可以实现需求。下面我分别介绍这2种实现方法。

方法一:建一个表xx,往xx表中插入1,2,3自然数列,简单起见,把自然数改成字符串,

然后xx表和xx表进行FULL JOIN(全外连接)得到结果集tmp,结果集tmp再和xx表进行LEFT JOIN(左连接),

关联的条件是当前xx表的数据不存在结果集tmp中,这个可以通过MSSQL内置函数CHARINDEX实现。

/*数据准备*/

WITHx0AS ( SELECT '1' AShidUNION ALL

SELECT '2' AShidUNION ALL

SELECT '3' AShid--UNION ALL

--SELECT '4' AS hid

)/*计算、输出*/

SELECT a.hid + b.hid AShidFROM ( SELECT a.hid + b.hid AShidFROMx0 aFULL JOIN x0 b ON b.hid <>a.hid

) aLEFT JOIN x0 b ON CHARINDEX(b.hid, a.hid, 1) = 0

ORDER BY 1

方法一看起来简单明了,用不着再解释了。现在我们来看一下方法二的实现:

通过CTE实现递归,把1,2,3的所有组合都枚举,最后在外层

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值