【发布时间】:2019-09-10 09:13:43
【问题描述】:
我有这个表没有链接到另一个表,因为它们没有任何相同的列。现在他们想要一个链接两个表格的报告。
但问题是他们唯一的共同列是 WAFER_INFO 列,它有多个用逗号分隔的值,这就是为什么我需要拆分它们以创建多个记录但不同的 WAFER_INFO。
第一个表
select wafer_info
from bondertab_g3
where tha_reel_id='TGDT349028H'
order by insert_dm,tha_reel_id,processlk_ky
上述查询的结果
TGK343067-22,TGK343067-25,TGK343067-24,TGK343067-23
第二张桌子
select hp_part_nr,wafer_id,good_cnt,total_rej_cnt,processlk_ky,toollk_ky,toolnrlk_ky,materiallk_ky
from sawinsptab
where wafer_id ='TGK343067-22';
select hp_part_nr,wafer_id,good_cnt,total_rej_cnt,processlk_ky,toollk_ky,toolnrlk_ky,materiallk_ky
from sawinsptab
where wafer_id ='TGK343067-25';
select hp_part_nr,wafer_id,good_cnt,total_rej_cnt,processlk_ky,toollk_ky,toolnrlk_ky,materiallk_ky
from sawinsptab
where wafer_id ='TGK343067-24';
select hp_part_nr,wafer_id,good_cnt,total_rej_cnt,processlk_ky,toollk_ky,toolnrlk_ky,materiallk_ky
from sawinsptab
where wafer_id ='TGK343067-23';
基本上都在第一个表中
我已经了解如何使用此代码拆分所有这些记录
With DATA AS (
select tha_reel_id, wafer_info str
from bondertab_g3
where tha_reel_id='TGDT349028H'
)
SELECT A.tha_reel_id, trim(regexp_substr(A.str, '[^,]+', 1, LEVEL)) WAFERID FROM DATA A
CONNECT BY instr(str, ',', 1, LEVEL - 1) > 0
现在我的问题是,当唯一相同的列是 WAFERID 时,如何连接上面的查询并将其连接到第二个表
【问题讨论】:
-
如果您需要在加入之前拆分字符串,您有一个设计错误并且必须规范化您的数据。服务器不能在这些列上使用任何索引,并且必须扫描整个表以查找匹配项。即使是少量数据,这也会非常变慢
-
与示例 I/O 数据共享表结构,这将有所帮助
-
您的拆分函数将生成重复行,随着输入行数和分隔项数的增加,重复行的频率将呈指数增长(因为分层查询无法与特定父行相关,因此将与所有父行)。