1

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

是否有一个查询可以。1) 在主字段上比较 tablea 和 tableb,2) 如果记录在 tablea 中而不是 tableb,则将记录从 tablea 复制到 tableb

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

谢谢

4

4 回答 4

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...)
于 2013-08-03T08:34:03.243 回答
0
INSERT INTO tableb AS b
(SELECT * FROM tablea AS a WHERE NOT EXISTS (SELECT * FROM tableb AS b2 WHERE b2.id = a.id))
于 2013-08-03T08:39:12.843 回答
0

使用merge......并且insert只使用......不使用update

于 2013-08-03T08:36:12.663 回答
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表(部分恢复的备份 + 新数据)。报告显示一切正常。谢谢大家的帮助。

于 2013-08-03T22:18:03.347 回答