我有一个SQL Insert语句,只有当table2中没有记录或者table1中的zip代码有变化时才需要将记录插入到另一个表中。我尝试了以下但它抛出了一个错误,这是我正在寻找的逻辑:
INSERT INTO table2
SELECT id, zip
FROM table1 t1
JOIN table2 t2
ON t1.id = t2.id and t1.zip <> t2.zip
如果id2在table2中根本不存在,我还需要它来插入记录。我已经用Google搜索了这个垃圾,似乎无法在任何地方找到解决方案。
答案 0 :(得分:0)
这个怎么样?
INSERT INTO table2
SELECT t2.id, t2.zip
FROM table1 t1
LEFT OUTER JOIN table2 t2
ON t1.id = t2.id
WHERE (t1.id IS NULL OR t2.zip <> t1.zip)
另外,请务必说明您要求的表格id
和zip
列。
答案 1 :(得分:0)
进行插入时应始终包含列列表。其次,您的查询并不能完全捕获您的逻辑。您需要left outer join
来查找第二个表中不存在的记录。也许这可能会做你想要的:
INSERT INTO table2(id, zip)
SELECT id, zip
FROM table1 t1 LEFT JOIN
table2 t2
ON t1.id = t2.id
WHERE (t1.zip <> t2.zip) or (t2.zip is null)
答案 2 :(得分:-1)
你只需要一个WHERE NOT EXISTS条款
INSERT INTO table2
SELECT id, zip
FROM table1
WHERE NOT EXISTS (SELECT 1 FROM table2 WHERE table2.id = table1.id AND table2.zip = table1.zip)