sql - 关于如何将数字 1 - 69 的所有可能的 5 个数字组合查询到 SQL 表中的逻辑问题

标签 sql sql-server algorithm

编辑:澄清一下,结果的顺序仅在 1、2、3、4、5 和 5、4、3、2、1 应该是同一条记录时才重要。所以我正在寻找不同的组合。

我希望构建一个 SQL 数据库,其中包含数字 1 - 69 的所有可能的 5 位数字组合,其中同一个数字不能在单个 5 位数字组合中使用两次。结果将包含 11,238,513 条记录。我在编写代码以使其与所有逻辑一起正常工作时遇到问题。我在 Excel VBA 中尝试过一个疯狂的宏,但我觉得 SQL 会更简单、更快捷。我问过类似的问题,但它也没有让我到达那里 ( How do I create a list of 5 number permutations based on a list of numbers ranging from 1-69? )。

我已经尝试了下面的变体,但我似乎无法概念化我应该如何攻击它。有帮助吗?

WITH range
AS (
SELECT num1 AS c FROM TEST1
  UNION  
  SELECT num2 FROM TEST1
  UNION  
  SELECT num3 FROM TEST1
  UNION  
  SELECT num4 FROM TEST1
  UNION  
  SELECT num5 FROM TEST1)
SELECT *
FROM range r1,range r2,range r3,range r4,range r5
where r1.c <> r2.c and r1.c<>r3.c and r1.c<>r4.c and r1.c<>r5.c
and r2.c <> r3.c and r2.c<>r4.c and r2.c<>r5.c
and r3.c<>r4.c and r3.c<>r5.c
and r4.c <> r5.c
order by r1.c, r2.c, r3.c, r4.c, r5.c

最佳答案

笛卡尔乘积表自身 5 次,并仅选择数字按升序排列的行(这确保不会多次选择相同的数字,并且相同的 5 个数字没有排列):

SELECT r1.c, r2.c, r3.c, r4.c, r5.c
FROM range r1, range r2, range r3, range r4, range r5
WHERE r1.c<r2.c AND r2.c<r3.c AND r3.c<r4.c AND r4.c<r5.c

关于sql - 关于如何将数字 1 - 69 的所有可能的 5 个数字组合查询到 SQL 表中的逻辑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35230363/

相关文章:

sql - 在 Sql 存储过程中使用 XML PATH

SQL Server 2016 源代码管理

计算字符串列表中出现次数的 Pythonic 方法

c - 无法使用 C 为无向图创建邻接表

mysql - 仅返回最大值小于指定值的行

iphone - 相当于 Core Data 的 GROUP BY

sql-server - 使用 SQL Server Server Management Studio 导入/导出数据库

c# - 通过 Sql Server 数据库更改通知 winforms 应用程序

c# - 实现接口(interface)

SQL Server 2005 数据库设计器