现有三个表BZ DAO MARKS
数据库为ORACLEcreate table BZ(
bz_number varchar2(20), //bz号
bz_name varchar2(20) //bz名
);create table DAO(
zkz varchar2(20), //准考证
//....其它字段
bz_name varchar2(20) //bz名
);create table MARKS(
zkz varchar2(20), //准考证
//....其它字段
bz_number varchar(20) //bz名
);
现在由于MARKS表的数据是要导进来的, 但是导进来的数据没有bz_number这个字段, 所以我想用触发器在插入的时候, 通过zkz从DAO表获得bz_name的值,再从BZ表通过bz_name获得bz_number的值, 并更新到新插入MARKS的行表的结构动不了, 很纠结一开始我是想先批处理把数据全导入之后, 再用嵌套子查询来更新MARKS表, 不过MARKS表只有10000条记录就用了5分钟.
如果能给一个速度很快的sql通过BZ和DAO表来更新MARKS表中的bz_number字段也可以
数据库为ORACLEcreate table BZ(
bz_number varchar2(20), //bz号
bz_name varchar2(20) //bz名
);create table DAO(
zkz varchar2(20), //准考证
//....其它字段
bz_name varchar2(20) //bz名
);create table MARKS(
zkz varchar2(20), //准考证
//....其它字段
bz_number varchar(20) //bz名
);
现在由于MARKS表的数据是要导进来的, 但是导进来的数据没有bz_number这个字段, 所以我想用触发器在插入的时候, 通过zkz从DAO表获得bz_name的值,再从BZ表通过bz_name获得bz_number的值, 并更新到新插入MARKS的行表的结构动不了, 很纠结一开始我是想先批处理把数据全导入之后, 再用嵌套子查询来更新MARKS表, 不过MARKS表只有10000条记录就用了5分钟.
如果能给一个速度很快的sql通过BZ和DAO表来更新MARKS表中的bz_number字段也可以
--DAO表zkz,bz_name字段分别建立索引
--BZ表bz_name建立索引
UPDATE MARKS m
SET m.bz_number =
(SELECT b.bz_number
FROM DAO d, BZ b
WHERE d.bz_name = b.bz_name
AND d.zkz = d.zkz)
BZ 30左右
DAO 20000, 每年增长不会超过5000, 导入操作不会太频繁
MARKS 每次导入的 应该有10000条
谢谢tangren的回答
create table BZ(
bz_number varchar2(20), //bz号
bz_name varchar2(20) //bz名
);
里通过BZ_name去取bz_number ,不可以吧,例如两条记录的bz_number 不一样,但是bz_name一样,这时候你怎么取?除非bz_number和bz_name一一对应
因为那个数据库的数据不一致, 有的前面有0, 有的前面没0 就用lapd函数把where中的zkz处理了,
果然如果不用这个函数只需要一两秒钟