我正在使用Oracle SQL数据库尝试根据第三列打印表中两列的所有可能组合。
进一步解释。我有一个包含三列的表:ID,attribute1和attribute2。假设每个ID,attribute1可以等于1,2,3或4,对于attribute2也是如此。 ID可以包含每个属性的多个值。
目前,如果ID = 1具有attribute1 = 1,2且attribute2 = 3,4且ID = 2具有attribute1 = 1,2,3且attribute2 = 1,4则可能将其列为
ID attribute1 attribute2
1 1 3
1 2 4
2 1 1
2 2 1
2 3 4
我想要的是每个ID的attribute1和attribute2的所有组合,所以它看起来像这样:
ID attribute1 attribute2
1 1 3
1 1 4
1 2 3
1 2 4
2 1 1
2 1 4
2 2 1
2 2 4
2 3 1
2 3 4
答案 0 :(得分:1)
此查询将返回每个ID的属性1和attribute2之间的所有组合:
SELECT A1.ID, attribute1, attribute2
FROM ( SELECT DISTINCT ID, Attribute1 FROM MyTable) A1
INNER JOIN ( SELECT DISTINCT ID, Attribute2 FROM MyTable) A2 ON A1.ID = A2.ID
答案 1 :(得分:0)
这样的事情应该这样做:
SELECT t1.id, t1.attribute1, t2.attribute2
FROM MyTable t1
JOIN MyTable t2
ON t1.id = t2.id
AND t1.attribute1 = t2.attribute1
UNION ALL
SELECT t1.id, t1.attribute1, t2.attribute2
FROM MyTable t1
JOIN MyTable t2
ON t1.id = t2.id
AND t1.attribute2 = t2.attribute2
如果您不想重复,请将UNION ALL
替换为UNION
。
我认为你也可以这样做,这可能会更好,但可能会更糟糕:
SELECT t1.id, t1.attribute1, t2.attribute2
FROM MyTable t1
JOIN MyTable t2
ON t1.id = t2.id
AND (t1.attribute1 = t2.attribute1 OR t1.attribute2 = t2.attribute2)