SQL Query查找两个表之间缺少的记录,然后使用第一个表中缺少的记录更新第二个表

时间:2013-08-03 08:30:21

标签: mysql

两张桌子。每个8个字段。两个表都有相同的数据,一个有 137,002记录(tablea)和一记135,759记录(tableb)。如果有三列(qid,sid,aid),两个表共享一个公共主要字段。

是否会有一个查询。 1)将tablea与主要字段上的tableb进行比较 和 2)如果记录在tablea而不是tableb,则将记录从tablea复制到tableb

我宁愿能够使用sql查询更新tableb,而不是编写一个php循环来浏览137,002并对每一个进行比较。

由于

4 个答案:

答案 0 :(得分:1)

那应该是看起来像:

insert into table2 (qid, sid ...)
    select  
        t1.qid,
        t1.sid,
        ...
    from table1 t1
    where 
        not exist (select t2.qid, t2.sid, ... from table2 t2 where t2.qid = t1.qid and t2.sid = t1.sid...)

答案 1 :(得分:0)

使用merge ...并仅使用insert ....而不是update

答案 2 :(得分:0)

INSERT INTO tableb AS b
(SELECT * FROM tablea AS a WHERE NOT EXISTS (SELECT * FROM tableb AS b2 WHERE b2.id = a.id))

答案 3 :(得分:0)

所以,以下工作。

insert into f_step_ans (`qid`, `assid`, `sid`, `sas`, `cas`, `etim`, `stim`, `endtim`, `fil`)
select  
    t1.qid,
    t1.assid,
    t1.sid,
    t1.sas,
    t1.cas,
    t1.etim,
    t1.stim,
    t1.endtim,
    t1.fil
from f_step_ans_back t1
where 
    not exists (select t2.qid, t2.sid,t2.assid from f_step_ans as t2 where t2.qid = t1.qid and t2.assid = t1.assid and t2.sid = t1.sid)

将1,588条记录从f_step_ans_back表(旧备份表)移至f_step_ans表(部分恢复备份+新数据)。报告显示一切都正常运作。谢谢大家的帮助。