我有一个参考数据表,其中列为代码和值。
例如有三种代码类型即。 A,B,C。
表格如下:
Code Value
---------------------
A1 a_one
A2 a_two
B1 b_one
B2 b_two
B3 b_three
C1 c_one
C2 c_two
C3 c_three
C4 c_four
---------------------
我有一个要求,输入将是代码类型,输出应该是输入代码类型之间的所有排列。
例如如果输入代码类型是A和C,我的sql的输出应该是:
col_1 col_2
---------------------
A1 C1
A1 C2
A1 C3
A1 C4
A2 C1
A2 C2
A2 C3
A2 C4
---------------------
类似地,如果输入代码类型是A,B,C,则sql的输出将具有三列,其中所有排列在A,B,C之间。 A1 B1 C1至A2 B3 C4。
我不知道如何开始这个。所以任何提示都会有用。
感谢阅读!
答案 0 :(得分:0)
如果我理解你的问题,这是CROSS JOIN
实际上是你想要的罕见情况之一。 CROSS JOIN
将为您提供两组Cartesian product,这意味着这些组中值之间的所有可能组合。
示例:
以下CROSS JOIN
查询(请注意,目的中没有指定'加入条件')
SELECT *
FROM A
CROSS JOIN B
将返回以下结果:
1 2
--------
a c
a d
b c
b d
我创建了一个 SQL Fiddle 来向您展示可能的解决方案。您可以稍微调整一下,看看这是否是您所需要的。 (注意它是Oracle的小提琴,因为没有DB2选项。)