我们可以使用“连接方式”从 oracle 中的分隔字符串生成行。喜欢:
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 上的按设施分组。任何人都可以帮我写这个查询吗?提前谢谢。:)