一个是用来存放数据的表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删掉,把这个表改名字,速度会更快.