数据库环境: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的所有组合都枚举,最后在外层把字符串长度为3的组合给过滤出来即可。

/*数据准备*/

WITHx0AS ( SELECT CONVERT(VARCHAR(10),1) AShidUNION ALL

SELECT CONVERT(VARCHAR(10),2) AShidUNION ALL

SELECT CONVERT(VARCHAR(10),3) AShid--UNION ALL

--SELECT CONVERT(VARCHAR(10),4) AS hid

)SELECT * INTO xx FROMx0WITHx1AS ( SELECThidFROMxxWHERE LEN(hid) <= 3

UNION ALL

SELECT CONVERT(VARCHAR(10), a.hid + b.hid) AShidFROMxx aINNER JOIN x1 b ON CHARINDEX(a.hid, b.hid, 1) = 0)SELECT *

FROMx1WHERE LEN(hid) = 3

ORDER BY hid

好了,方法二也实现了。这里要注意一点,就是插入xx表要指定数据类型及长度,在拼接的时候,也要转换一下格式。不然,

会提示“类型不匹配”错误。

OK,我把结果贴一下。

现在简单总结一下这2种实现方法,方法一技巧性比较强,也很简单,容易理解,缺点是如果要增加到4位数,那么,就要在外面多套一些循环。

方法二用到了递归,理解起来有点困难,但相对于方法一更灵活,如果增加到更多的数,只需改一下代码中相应的数字即可。

(本文完)

mysql排列组合实现_排列组合的实现相关推荐

  1. 排列公式和组合公式_排列与组合:排列公式与组合公式之间有什么区别?

    排列公式和组合公式 Here's the short version. 这是简短的版本. Let's take ringing bells in a church as an example. 让我们 ...

  2. mysql排列组合实现_排列-组合的代码实现

    排列组合是算法常用的基本工具,如何在c语言中实现排列组合呢?思路如下: 首先看递归实现,由于递归将问题逐级分解,因此相对比较容易理解,但是需要消耗大量的栈空间,如果线程栈空间不够,那么就运行不下去了, ...

  3. 排列组合 离散数学_排列组| 离散数学

    排列组合 离散数学 排列组 (Permutation Group) Let, X be a non-empty set. A permutation of X is a one-one functio ...

  4. python数字排列组合去重_排列组合-生成集合的所有子集

    //一个有N个不重复元素的集合的某个子集,可以用这个N个元素中每个元素在或是不在这个子集中来表示. //把这N个元素一字排开,每个位置可以用1来标识对应位置的元素在子集中,用0来标识这个元素不在子集中 ...

  5. python硬币多少组合方式_硬币组合的完全搜索算法

    这个问题类似于硬币兑换问题,但有点不同.在 问题是这样说的:你有一套硬币,你知道硬币的价值和每种硬币的数量.你想知道你能从这些硬币的非空分组中得到多少不同的总数.在 例如coins = [1, 2, ...

  6. python 排列组合算法_基于python快速实现排列组合算法

    1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库#_*_ coding:utf-8 _*_ #__author__= ...

  7. 排列组合思维导图_排列组合——排列数专题

    在上篇关于排列组合主要考点的介绍中,正男老师提到:排列组合考点通常可以拆分为排列数考点和组合数考点.排列数考点相关试题可以细分为2类,分别为:穷举问题和限制条件问题.本期正男老师就从近六年内的5道涉及 ...

  8. python 排列组合算法_排 列 组 合 公 式 及 排 列 组 合 算 法

    排列组合--排列公式的推理和组合 [实操追 - 女资 - 源] [企鹅 : 10⒈ б .x.9 526] 加法原理和乘法原理,是排列组合中的二条基本原理,在解决计数问 题中经常运用.掌握这两条原理, ...

  9. 围成一圈的排列组合问题_行测技巧:巧解环形排列组合

    各位同学,排列组合是行测考试中的一个高频考点,也是我们学习的难点.排列组合中有一种特殊的模型---环形排列组合,那么今天小编就带大家一起来探讨一下:如何求解环形排列组合问题. 首先我们需要明确,什么是 ...

  10. 围成一圈的排列组合问题_行测技巧:排列组合之“环形排列”问题

    原标题:行测技巧:排列组合之"环形排列"问题 在公考学习备考中排列组合一直是大家比较头疼的题目,很多同学在高中时就对这种题目望而却步,其实排列组合题目虽然比较难,但是这类题目却可以 ...

最新文章

  1. 设计模式系列-建造者模式
  2. Cs Tip13: 删除安装文件
  3. EJB3.0高速入门项目开发步骤
  4. cocos2dx 3.x(移动修改精灵坐标MoveTo与MoveBy)
  5. 自动驾驶 9-2: 卡尔曼滤波器和偏置BLUEs Kalman Filter and The Bias BLUEs
  6. 配置JDK环境变量详细步骤
  7. 苹果雪豹操作系统_苹果从英特尔转向ARM,可能意味着暂时不适合购买Mac
  8. 分享怎样自己做网站赚钱年入40万
  9. GPS 校验和 代码_嵌入式Linux平台的GPS数据采集
  10. 第三十三章 SQL函数 COT
  11. k8s 配置存储之 Configmap secret
  12. 给大家推荐一首好听的流行音乐
  13. vim正则表达式(转)
  14. 计算机开机后黑屏一闪一闪怎么办,电脑屏幕老一闪一闪的,一会黑屏一会又亮了,有时...-显示屏闪黑屏重新开机...
  15. 美颜sdk磨皮与瘦脸功能代码分析
  16. S5PV210裸机之LCD
  17. 完美解决Github上下载项目失败或速度太慢的问题
  18. BPM工作流 前端JS 处理细节(二)
  19. Win8上Service程序及外部App调用此Service
  20. 一些特殊字符的英文读法

热门文章

  1. 5G工业无线网关在物联网的应用优势
  2. 程序猿来找找自己的目标
  3. 为什么犹太人能出这么多诺贝尔奖,看看他们的家庭教育吧!
  4. linux安装so共享动态库文件下载,linux下的共享库(动态库)和静态库
  5. 小米平板2刷哪个系统更流畅_小米平板2刷lineage os与remix os及其体验
  6. Linux- 控制 LED 灯设备(LED 子系统)
  7. CodeForces - 1152 B. Neko Performs Cat Furrier Transform
  8. MathJax 支持的 Latex 符号总结
  9. 我在京东这一年—张亮
  10. 宽、窄带语谱图分析总结