基于sql中的第三个返回两列的所有组合

时间:2017-10-19 12:15:00

标签: sql oracle

我正在使用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 

2 个答案:

答案 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)