【发布时间】:2015-07-23 10:25:17
【问题描述】:
我的数据库中有一个列,其中包含 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
【问题讨论】:
-
使用
With子句,或者干脆创建一个视图。 -
仅供参考 -
WITH指的是使用Common Table Expressions。 -
你为什么不把 pfcc 作为一个子查询,然后用它来加入你的另一个表?