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

基于sql中的第三列返回两列的所有组合,sql,oracle,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 attr

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

像这样的东西应该可以做到:

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)

此查询将返回每个ID的属性1和属性2之间的所有组合:

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

那么,您现在还在使用Oracle还是SQL Server。它应该被标记为“oracle”。谢谢你的回答,但这是否意味着我必须先创建第二个名为t2的表?@tomaxelsson:t1和t2是别名。表是相同的-MyTable-您应该用真实的表名替换它。谢谢您的回答,但当我运行此操作时,我会出现错误“FROM关键字not found where expected”,有什么想法吗?我忘记在子查询中指定“FROM Table”,现在我已经修改了它。