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

2024-02-08

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

我希望建立一个 SQL 数据库,其中包含数字 1 - 69 的所有可能的 5 个数字组合,其中相同的数字不能在单个 5 个数字组合中使用两次。结果将包含 11,238,513 条记录。我在编写代码以使其能够与所有逻辑一起正常工作时遇到困难。我在 Excel VBA 中尝试过一个疯狂的宏,但我觉得 SQL 会更简单、更快。我问过类似的问题,但它也没有让我到达那里(如何根据 1-69 范围内的数字列表创建 5 个数字排列的列表? https://stackoverflow.com/questions/34401805/how-do-i-create-a-list-of-5-number-permutations-based-on-a-list-of-numbers-rangi).

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

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 SQL 表中查询数字 1 - 69 的所有可能的 5 个数字组合的逻辑有问题 的相关文章

随机推荐