我有一个ArchiveTable
,我想定期从OriginalTable
复制任何新记录。这是我认为可行的。
INSERT INTO OriginalTable
SELECT *
FROM ArchiveTable
WHERE NOT EXISTS (SELECT *
FROM OriginalTable ot
INNER JOIN ArchiveTable at ON ot.email = at.email)
简单地做一些像......
INSERT INTO ArchiveTable
SELECT * FROM OriginalTable
当然,只适用于初始副本。
答案 0 :(得分:1)
您当前的疑问:
INSERT INTO OriginalTable
SELECT * FROM ArchiveTable
WHERE NOT EXISTS
(SELECT * FROM OriginalTable ot
INNER JOIN ArchiveTable at
ON ot.email = at.email)
使用与外部查询无关的EXISTS子查询。所以它说,“如果原始表中没有与存档表中任何行具有相同电子邮件的行,则将存档表中的所有内容插入到原始表中。”
可能不是你想要的。您可能希望插入原始表中尚不存在的特定行。因此,您需要将子查询与外部查询相关联:
INSERT INTO OriginalTable
SELECT * FROM ArchiveTable at
WHERE NOT EXISTS
(SELECT * FROM OriginalTable ot
WHERE ot.email = at.email)
此查询说,“在原始表格中插入归档表格中我还没有原始表格中的电子邮件的任何行”。