MySQL使用多个NOT IN条件将行从一个表复制到另一个表

时间:2016-02-15 20:12:30

标签: mysql sql

我们有一个旧的FoxPro数据库仍然有输入的活动数据。我正在编写一系列.bat文件,这些文件将为我正在处理的Web应用程序更新MySQL数据库。

我们的FoxPro数据库从未设置过唯一的ID或任何有用的东西,因此我不得不让查询查看几个不同的字段。

到目前为止,我的查询是

//traininghistory = MySQL DB
//traininghistory_test = FoxPro DB

INSERT INTO traininghistory
      WHERE traininghistory_test.CLASSID NOT IN(SELECT CLASSID FROM traininghistory)
      AND traininghistory_test.EMPID NOT IN(SELECT EMPID FROM traininghistory)

我之后是什么: 我需要一个查询FoxPro DB中600,000个条目的查询(我的代码中的traininghistory_test),并与MySQL DB中的600,000多个条目(我的代码中的traininghistory)进行比较,并且仅插入CLASSID和EMPID列中的条目。新的 - 也就是说,他们不在训练史表中。

对此有任何想法(或者如果您知道在MySQL中执行此查询的更简单/更有效的方法),我们非常感谢。

2 个答案:

答案 0 :(得分:3)

一种选择是使用outer join / null支票:

insert into traininghistory
select values
from traininghistory_test tht
    left join traininghistory th on tht.empid = th.empid 
                  and tht.classid = th.classid
where th.empid is null

值得注意的是,您当前的查询可能会遗漏记录,因为它没有在同一记录中比较empidclassid

答案 1 :(得分:1)

一种方式是

在COLUMS上创建一个独特的索引(CLASSID,EMPID),

THEN

INSERT IGNORE INTO traininghistory SELECT * or fieldlist FROM traininghistory_test;

多数人