我试图将我已有的数据(库存清单)与每日更新进行协调,这是一个具有相同布局的表格;我需要的只是当前表中四个字段中任何一个字段都有差异的行(其他字段的差异不予考虑。)
我现在正在做的是:
insert into diff
select * from new n
where concat(n.distrib_pn, n.available_total, n.cost, n.map) not in
(select concat(c.distrib_pn, c.available_total, c.cost, c.map) from current c);
速度非常慢:约有7,000行的两个文件约35秒。new
,current
和diff
表在distrib_pn
上编入索引。我也尝试过这样做而不使用concat()
,但无法弄清楚语法。
答案 0 :(得分:0)
这会更快,但不一定快。
select n.*
from new n left join current c
on concat(n.distrib_pn, n.available_total, n.cost, n.map)
= concat(c.distrib_pn, c.available_total, c.cost, c.map)
where c.distrib_pn is null
更快的是你没有使用not in
。加入函数结果会减慢速度。但是,根据您的查询应该完成的任务,这可能是唯一的方法。
答案 1 :(得分:0)
您好您可以使用联接查询来执行此操作。
insert into diff
select n.* from new n inner join current c on
n.distrib_pn != c.distrib_pn and
n.available_total != c.available_total and
n.cost != c.cost and
n.map != c.map;
希望这会有所帮助