这是我的表记录 - 表名是temp。
1 | java,c,.net
2 | oracle,hadoop,ruby
其实我正在寻找这样的数据。
1| java
1 | c
1 | .net
2 | oracle
2| hadoop
2 | ruby
我在下面写了查询,预期结果不匹配。你可以检查验证我的查询为什么它导致deplicate,
select id,
regexp_substr(liked,'[^,]+', 1, level) from
temp connect by regexp_substr(liked,'[^,]+', 1, level) is not null order by id
答案 0 :(得分:0)
你想做这样的事情:
SELECT id, REGEXP_SUBSTR(liked, '[^,]+', 1, LEVEL)
FROM temp
CONNECT BY REGEXP_SUBSTR(liked, '[^,]+', 1, LEVEL) IS NOT NULL
AND PRIOR id = id
AND PRIOR SYS_GUID() IS NOT NULL
ORDER BY id;
这种使用DISTINCT
的方式不是必需的。
编辑:如果不在CONNECT BY
子句中使用随机数,您将收到错误,因为Oracle会认为它是无限循环。
答案 1 :(得分:0)
要获得您正在寻找的确切结果,您需要使用DISTINCT并且您需要在ID中按LEVEL排序:
SELECT ID, LIKED
FROM (select DISTINCT id, level, regexp_substr(liked,'[^,]+', 1, level) as liked
from temp
connect by regexp_substr(liked,'[^,]+', 1, level) is not null
order by id, level);
祝你好运。