我们有一个旧的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中执行此查询的更简单/更有效的方法),我们非常感谢。
答案 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
值得注意的是,您当前的查询可能会遗漏记录,因为它没有在同一记录中比较empid
和classid
。
答案 1 :(得分:1)
一种方式是
在COLUMS上创建一个独特的索引(CLASSID,EMPID),
THEN
INSERT IGNORE INTO traininghistory SELECT * or fieldlist FROM traininghistory_test;
多数人