我需要将TableA中的一组数据复制到TableB中,如下所示:
INSERT INTO TableB(id,field1,field2)
SELECT id,field1,field2 FROM TableA
以上内容效果很好,但是TableB
可能已经包含了我需要复制的一些记录,由PK id
标识。
因此,如果TableB中尚未包含id
值,如何向添加插入记录?我知道可以在INSERT语句的末尾添加WHERE
子句,但我不确定如何将它应用于每个记录。
答案 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