如何在表之间传输数据,仅在不存在id的情况下

时间:2015-03-18 09:20:40

标签: mysql sql database database-design

我需要将TableA中的一组数据复制到TableB中,如下所示:

INSERT INTO TableB(id,field1,field2) 
SELECT id,field1,field2 FROM TableA 

以上内容效果很好,但是TableB可能已经包含了我需要复制的一些记录,由PK id标识。

因此,如果TableB中尚未包含id值,如何向添加插入记录?我知道可以在INSERT语句的末尾添加WHERE子句,但我不确定如何将它应用于每个记录。

7 个答案:

答案 0 :(得分:1)

您可以查看比较NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL的3种方法。

  

MySQL 中搜索缺失值的最佳方法是使用 LEFT    JOIN / IS NULL NOT IN 而不是 NOT EXISTS


您可以使用NOT EXISTS

INSERT INTO TableB (id, field1, field2) 
SELECT id, field1, field2 
FROM TableA t1
WHERE NOT EXISTS (
                   SELECT *
                   FROM TableB t2
                   WHERE t1.id = t2.id
                  )

您也可以使用LEFT JOIN

INSERT INTO TableB (id, field1, field2) 
SELECT id, field1, field2 
FROM TableA t1
LEFT JOIN TableB t2 ON t1.id = t2.id
WHERE t2.id IS NULL

您也可以使用NOT IN

INSERT INTO TableB (id, field1, field2) 
SELECT id, field1, field2 
FROM TableA t1
WHERE t1.id NOT IN (
                    SELECT t2.id 
                    FROM TableB t2 
                    WHERE t1.id = t2.id
                   )

答案 1 :(得分:0)

您可以使用左连接,如下所示

INSERT INTO TableB(id,field1,field2) 
SELECT id,field1,field2 FROM TableA 
left join TableB on TableB.id = TableA.id
where TableB.id is null

答案 2 :(得分:0)

你可能想要一个带有exists()的where子句

INSERT INTO TableB(id,field1,field2) 
SELECT id,field1,field2 FROM TableA a
WHERE  not exists (SELECT 1 FROM TableB b WHERE a.id = b.id)

答案 3 :(得分:0)

INSERT INTO TableB(id,field1,field2)     
SELECT A.id,A.field1,A.field2 FROM TableA WHERE NOT EXISTS
    (SELECT B.ID FROM TABLEB WHERE B.ID = A.ID)

答案 4 :(得分:0)

尝试使用左连接:

INSERT INTO TableB(id,field1,field2) 
SELECT id,field1,field2 FROM TableA left join TableB on tableA.id = tableb.id where tablea.id is null

答案 5 :(得分:0)

最好使用设置运算符EXCEPT 以获得最佳性能,如下所示:

这里需要两组数据才能减去并给出输出

INSERT INTO TableB(id,field1,field2) (
SELECT id,field1,field2 FROM TableA 
 except
SELECT id,field1,field2 FROM TableB )

答案 6 :(得分:0)

INSERT INTO TableB(id,field1,field2) SELECT T2.id,T2.field1,T2.field2 FROM TableA为T1 内部联接TableB作为T1上的T2.id<> T2.id