【发布时间】:2015-02-09 14:45:13
【问题描述】:
一点背景故事,我在数据库中有一个逗号分隔的列,我试图将其转换为多对多联结表,所以没有
ID REPORT
1 5,6,7
我会看到
ID REPORT
1 5
1 6
1 7
下面的查询就是这样做的,而且似乎工作正常,
with t as (select id,hqcat from report)
SELECT id, EXTRACT(column_value,'/e/text()') hqcat from t x,
TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<ROW><e>'||REPLACE(hqcat,',','</e><e>')||'</e></ROW>'),'//e')))
但是,当我尝试通过 hqcat 将其加入我的查找表时,我收到关于不稳定数据类型的 ORA-00932 错误,请帮助我,如何更改我的原始查询以使其与其他表和连接一起使用?
这是导致错误的连接:
select *
from BIN03 a11
join ( with t as (select id,hqcat from report)
SELECT id, EXTRACT(column_value,'/e/text()') hqcat from t x,
TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<ROW><e>'||REPLACE(hqcat,',','</e><e>')||'</e></ROW>'),'//e')))) a12
on (a11.CODE = a12.HQCAT);
谢谢!
我也尝试过这样创建新的“多对多”视图:
WITH TAB AS
( (select id ID, hqcat STR from report))
SELECT ID as ID,
REGEXP_SUBSTR (STR, '[^,]+', 1, LEVEL) HQCAT FROM TAB
CONNECT BY LEVEL <= (regexp_count(str,',') + 1);
但这只会将查询速度降低 1000 秒.....
【问题讨论】:
标签: oracle tsql join oracle11g xmltype