在表中关于翻译字典的解决方案(总结网上的部分资料)

一个是用来存放数据的表T(1000万级别),一个是字典表DICT(小于1W条)
因表T是外面拷贝来的,里面的很多字段都是字典代码,我现在需要将T中的所有字典代码全部翻译过来。
假设T的某个字段----GJDQ(国家地区)存放的是代码,如CHN等,在DICT表中有LB(类别),DM(代码)和DMHY(代码含义)三个字段,这里可以保证在同一个类别下,代码与代码含义是一一对应的
SQL语句是这样写的:
update T set T.GJDQ = NVL((select DICT.DMHY FROM DICT where DICT.LB='GJDQ' and DICT.DM=T.GJDQ),T.GJDQ);
commit;

 

如果数据量太大,这种方法会很慢.

 

 

可以在INSERT到T的时候就做这个转换,不要事后UPDATE。
MERGE INTO T
USING (SELECT T.ROWID rid, DICT.DMHY
FROM t JOIN DICT ON (DICT.LB='GJDQ' and DICT.DM=T.GJDQ)
) data
ON (t.ROWID = data.rid)
WHEN MATCHED THEN UPDATE SET t.GJDQ = data.DMHY;

 

 

还可以新建一个表

CREATE TABLE T2 AS
SELECT T.BH,T.XM
,NVL(DICT1.DMHY,T.GJDQ) AS GJDQ
,NVL(DICT2.DMHY,T.XB) AS XB
,NVL(DICT3.DMHY,T.KHYH) AS KHYH
FROM t LEFT JOIN DICT DICT1 ON DICT.LB='GJDQ' AND DICT.DM=T.GJDQ
LEFT JOIN DICT DICT2 ON DICT.LB='XB' AND DICT.DM=T.XB
LEFT JOIN DICT DICT3 ON DICT.LB='KHYH' AND DICT.DM=T.KHYH

 

然后把T删掉,把这个表改名字,速度会更快.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值