什么是基于几列获得两个MySQL表的差异的有效方法?

时间:2016-09-08 16:12:56

标签: mysql sql database workflow

我试图将我已有的数据(库存清单)与每日更新进行协调,这是一个具有相同布局的表格;我需要的只是当前表中四个字段中任何一个字段都有差异的行(其他字段的差异不予考虑。)

我现在正在做的是:

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秒。newcurrentdiff表在distrib_pn上编入索引。我也尝试过这样做而不使用concat(),但无法弄清楚语法。

2 个答案:

答案 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;

希望这会有所帮助