SQL插入数据如果列A匹配而列B没有

时间:2014-06-13 16:00:55

标签: sql sql-server join insert

我有一个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搜索了这个垃圾,似乎无法在任何地方找到解决方案。

3 个答案:

答案 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)

另外,请务必说明您要求的表格idzip列。

答案 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)