現有一張表test含兩個欄位idA和idB,如何使用一個sql實作將兩個欄位所有有關聯的id作為一個集合輸出。
例:
idA idB
A B
B A
B D
D G
F H
F J
預期結果:
No id
1 A
1 B
1 D
1 G
2 F
2 H
2 J
使用:WITH xxx AS(
...
union all
...
)select * from xxx;時會出現大量重復資料,有沒有什么解決辦法?
uj5u.com熱心網友回復:
不想有重復就別用union all,用unionuj5u.com熱心網友回復:
遞回只能用union all
uj5u.com熱心網友回復:
使用的是DB2資料uj5u.com熱心網友回復:
額,使用的DB2資料庫?uj5u.com熱心網友回復:
這里是Oracle,到DB2去問下更好。
uj5u.com熱心網友回復:
那邊人少,讓我來這邊試試。。。
uj5u.com熱心網友回復:
help。。uj5u.com熱心網友回復:
不知道你咋遞回的, 可能CTE遞回有更好的辦法WITH TMP AS
(SELECT 'A' AS ID1, 'B' AS ID2
FROM DUAL
UNION ALL
SELECT 'B' AS ID1, 'A' AS ID2
FROM DUAL
UNION ALL
SELECT 'B' AS ID1, 'D' AS ID2
FROM DUAL
UNION ALL
SELECT 'D' AS ID1, 'G' AS ID2
FROM DUAL
UNION ALL
SELECT 'F' AS ID1, 'H' AS ID2
FROM DUAL
UNION ALL
SELECT 'F' AS ID1, 'J' AS ID2
FROM DUAL)
SELECT ID1, DENSE_RANK() OVER(ORDER BY MIN(R)) RN
FROM (SELECT ID1, ID2, CONNECT_BY_ROOT(ID1) R
FROM TMP T
CONNECT BY NOCYCLE PRIOR ID1 = ID2
UNION ALL
SELECT ID2, ID1, CONNECT_BY_ROOT(ID1) R
FROM TMP T
CONNECT BY NOCYCLE ID1 = PRIOR ID2)
GROUP BY ID1
uj5u.com熱心網友回復:
根本就不知道你的ID那一列是表示什么轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/79257.html
標籤:開發
上一篇:在Oracle視圖中加入order by得出了錯誤的結果是什么情況
下一篇:SQL兩個不同表合到一起
