编辑:只是为了澄清一下,结果的顺序仅重要于 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