我有一张表,numbers
其中包含各种nums
范围[0-9]
--------
| nums |
--------
| 0 |
| 1 |
| .... |
| 9 |
--------
我想多次取这张表的笛卡尔积(实际上,准确地说是8次):
SELECT * FROM numbers A, numbers B, numbers C, numbers D, ...
这样A.nums
和B.nums, ...
是唯一的组合,并且它们不等于另一个数字的相同值。
这是我希望看到的一些示例输出:
(0, 1, 2, 3)
(3, 2, 1, 0)
(2, 1, 3, 0)
(0, 2, 1, 3)
(0, 9, 8, 7)
(1, 2, 3, 4)
(1, 3, 5, 9)
(1, 9, 8, 7)
...但没有像元组这样的(0, 0, 1, 2), (1, 1, 2, 2), etc.
元组也不应该重复,例如(1, 2, 3, 4) and (1, 2, 3, 4)
元组中的每个值都必须与元组中的另一个值不同。
我确信有一种更有效的方法可以做到这一点,但我已经采取A.nums != B.nums, ...
了每一种可能性。似乎比较有效;为 8 路笛卡尔积提供约 300 毫秒的运行时间,但我想知道是否有更简单、更优雅的解决方案具有类似的运行时间。