有一张表 TableA,有数据如下(十万条左右); id name date rowid 001 ss 20100901 0ssd
002 bb 20100908 0sds
003 cc 20100908 0syt
此表中 id 为主键,rowid为外键。有另一张表TableB ,数据(八万条左右)。rowid name date
0ssd ss 20100901
0sds bb 20100909
0ise hh 20100919现在需要TableB和TableA比较,存入TableC中。要求如下:(1)根据TableB表的rowid寻找TableA表中的数据,当TableA表中存在这条数据时,再看TableB表和TableA表的
date 字段是否相同,如相同,跳过,如不同,存入TableC表中,并加标示字段 falg 为1 例如:上面的数据rowid 为 0ssd 的,由于date 字段相同,不需要存入TableC表中。
rowid 为 0sds 的,date不同 ,需要存入TableC中。 (2)当TableB表中的rowid在TableA表中不存在的数据,存入TableC表中,同时修改TableC 的falg为 2。
例如: 上边表的最终结果为: TableC : id name date rowid falg
002 bb 20100908 0sds 1
hh 20100919 0ise 2由于数据量很大,如何最高效的得到结果,欢迎讨论。
002 bb 20100908 0sds
003 cc 20100908 0syt
此表中 id 为主键,rowid为外键。有另一张表TableB ,数据(八万条左右)。rowid name date
0ssd ss 20100901
0sds bb 20100909
0ise hh 20100919现在需要TableB和TableA比较,存入TableC中。要求如下:(1)根据TableB表的rowid寻找TableA表中的数据,当TableA表中存在这条数据时,再看TableB表和TableA表的
date 字段是否相同,如相同,跳过,如不同,存入TableC表中,并加标示字段 falg 为1 例如:上面的数据rowid 为 0ssd 的,由于date 字段相同,不需要存入TableC表中。
rowid 为 0sds 的,date不同 ,需要存入TableC中。 (2)当TableB表中的rowid在TableA表中不存在的数据,存入TableC表中,同时修改TableC 的falg为 2。
例如: 上边表的最终结果为: TableC : id name date rowid falg
002 bb 20100908 0sds 1
hh 20100919 0ise 2由于数据量很大,如何最高效的得到结果,欢迎讨论。
date 字段是否相同,如相同,跳过,如不同,存入TableC表中,并加标示字段 falg 为1insert into tablec c
select 1, id, name, date, rowid
from tablea a
where not exists (select id
from tablea a, tableb b
where a.rowid = b.rowid
and a.date = b.date)(2)当TableB表中的rowid在TableA表中不存在的数据,存入TableC表中,同时修改TableC 的falg为 2。insert into tablec c
select 2, id, name, date, rowid
from tablea a
where exists (select id from tableb b where b.rowid != a.rowid)
insert into tablec c
select 2, id, name, date, rowid
from tablea a
where exists (select id from tableb b where b.rowid != a.rowid)这个有问题吧,tableb表中没有ID字段哦,即使有,当b.rowid !-a.rowid 的 时候,tableb表中的id也是空的啊
select 2, id, name, date, rowid
from tablea a
where a.rowid exists (select rowid from tableb b where b.rowid != a.rowid)