1
我們可以使用「Connect By」從oracle中的分隔字符串生成行。像:「Connect By」根據多個分隔字符串生成行
SELECT Rn ,Regexp_Substr(data, '[^,]+', 1, LEVEL) Data
FROM (SELECT 1 Rn ,'id:a,val:b,desc:c' data FROM Dual) Idata
CONNECT BY Regexp_Substr(data, '[^,]+', 1, LEVEL) IS NOT NULL
我想使用內部查詢作爲一個聯合所有幾個記錄。喜歡的東西:
SELECT Rn ,Regexp_Substr(data, '[^,]+', 1, LEVEL) Data
FROM (SELECT 1 Rn ,'id:a,val:b,desc:c' data FROM Dual
UNION ALL
SELECT 2 Rn ,'id:a2,val:b2,desc:c2' data FROM Dual
UNION ALL
SELECT 3 Rn ,'id:a3,val:b3,desc:c3' data FROM Dual) Idata
CONNECT BY Regexp_Substr(data, '[^,]+', 1, LEVEL) IS NOT NULL;
,這樣我可以得到一個結果集,
RN DATA
1 desc:c
1 id:a
1 val:b
2 desc:c2
2 id:a2
2 val:b2
3 desc:c3
3 id:a3
3 val:b3
但它不能正常工作,它是如來:
RN DATA
1 desc:c
1 desc:c
1 desc:c
1 desc:c
1 desc:c
1 desc:c
1 desc:c
1 desc:c
1 desc:c
1 id:a
1 val:b
1 val:b
1 val:b
2 desc:c2
2 desc:c2
2 desc:c2
2 desc:c2
2 desc:c2
2 desc:c2
2 desc:c2
2 desc:c2
:
:
:
應用DISTINCT不目標。因爲這些字符串可能會有所不同,並且在這裏需要花費很多時間來分割更大的字符串。我想,在這個查詢中,LEVEL代不適合。可能是,可能需要使用Rn上的設施。任何人都可以幫我寫這個查詢嗎?謝謝你前進。 :)