编辑:只是为了澄清,结果的顺序仅在1,2,3,4,5和5,4,3,2,1应该是相同的记录才重要。所以我正在寻找不同的组合。
我正在寻找一个SQL数据库,该数据库具有数字1-69的所有可能的5个数字组合,其中同一数字不能在单个5个数字组合中使用两次。结果将包含11,238,513条记录。我在编写代码时遇到麻烦,无法使其与所有逻辑配合正常工作。我曾尝试在Excel VBA中使用疯狂的宏,但我觉得SQL会更简单,更快捷。我已经问过类似的问题,但是它也没有使我到达那里(我如何基于1-69范围内的数字列表创建5个数字排列的列表?)。
我已经尝试过下面的变体,但是我似乎无法概念化如何应对这个问题。有什么帮助吗?
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