小编典典

连接到Oracle中的拆分字符串列

sql

我的数据库中有一列,其中包含4个字段,以“ \”定界字符串。

在我的报告中,我根据需要分别拆分了这些字段。

我还需要单独使用这些字段作为针对另一个表的条件。

我尝试过的事情: 临时表:

CREATE GLOBAL TEMPORARY TABLE pfcc
   ON COMMIT PRESERVE ROWS 
   AS select REGEXP_SUBSTR(s, '[^\]+', 1, 1) colA,
       REGEXP_SUBSTR(s, '[^\]+', 1, 2) colB,
       REGEXP_SUBSTR(s, '[^\]+', 1, 3) colC,
       REGEXP_SUBSTR(s, '[^\]+', 1, 4) colD
from (select delimited s from products
                        where productid = 1)

然后将其与另一个表连接。

select * from pfcc tmp
inner join lineitems gch 
    on gch.Line = tmp.colA
    AND gch.productB = tmp.colB
    AND gch.productC = tmp.colC

我也尝试立即加入而不将值存储在表中:

select REGEXP_SUBSTR(s, '[^\]+', 1, 1) colA,
       REGEXP_SUBSTR(s, '[^\]+', 1, 2) colB,
       REGEXP_SUBSTR(s, '[^\]+', 1, 3) colC,
       REGEXP_SUBSTR(s, '[^\]+', 1, 4) colD
from (select delimited s from products
                        where productid = 1) tmp
inner join lineitems gch 
    on gch.Line = tmp.colA
    AND gch.productB = tmp.colB
    AND gch.productC = tmp.colC

我想 避免 使用临时表,并使其类似于第二种方法。如果这是不可避免的,那就这样吧。

有人对此有解决方案吗?

谢谢,JFIT


阅读 216

收藏
2021-04-14

共1个答案

小编典典

我认为这是您想要的查询:

select gch.Line, gch.productB, gch.productC,
       REGEXP_SUBSTR(p.delimited, '[^\]+', 1, 4)
from  products p inner join
      lineitems gch 
      on gch.Line = REGEXP_SUBSTR(p.delimited, '[^\]+', 1, 1) and
         gch.productB = REGEXP_SUBSTR(p.delimited, '[^\]+', 1, 2) and
         gch.productC = REGEXP_SUBSTR(p.delimited, '[^\]+', 1, 3)
where p.productid = 1;

您既不需要子查询,也不需要临时表。

2021-04-14