2017-10-19 130 views
0

我正在使用一個Oracle SQL數據庫嘗試打印基於第三列的表中兩列的所有可能的組合。基於第三個返回兩列的所有組合基於第三個sql

爲了進一步解釋。我有一個包含三列的表:ID,attribute1和attribute2。對每個ID說,每個屬性1可以等於1,2,3或4,屬性2也是如此。該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

那麼你現在還在'Oracle'或者它是否是'SQL Server'? – Squirrel

+0

嗯,我對數據庫相當陌生,但我使用Oracle SQL開發人員,我認爲這意味着它是一個Oracle服務器,對吧? –

+0

是的,很可能,但您已經標記了「sql-server」這個問題,意思是「Microsoft SQL Server」。它應該被標記爲「oracle」。 –

回答

1

這個查詢將返回屬性1 attribute2之間的所有組合的每個ID:

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 
+0

感謝您的答案,但是當我運行這個時,我得到了錯誤「從關鍵字找不到預期的地方」,任何想法? –

+0

我忘了在子查詢中指定'FROM Table',現在我修改了它。 –

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

我認爲你可以這樣來做,也可能是更好的,但可能表現更差:

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) 
+0

感謝您的答案,但這是否意味着我必須創建第二個名爲t2第一個表? –

+1

@Tom Axelsson:t1和t2是別名。表是一樣的 - MyTable - 你應該用你的真實表名替換。 –

相關問題