我的数据库中有一列,其中包含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
我认为这是您想要的查询:
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;
您既不需要子查询,也不需要临时表。