首页 文章

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

提问于
浏览
0

我有一个SQL Insert语句,只有当table2中不存在该记录或者table1中的邮政编码有变化时才需要将记录插入到另一个表中 . 我尝试了以下但它抛出一个错误,这是我正在寻找的逻辑:

INSERT INTO table2
SELECT id, zip
FROM table1 t1
JOIN table2 t2
ON t1.id =  t2.id and t1.zip <> t2.zip

如果table2中的id根本不存在,我还需要它来插入记录 . 我用Google搜索了这个垃圾,似乎无法在任何地方找到解决方案 .

3 回答

  • 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

    在插入时应始终包含列列表 . 其次,您的查询并不能完全捕获您的逻辑 . 您需要 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)
    
  • 0

    你只需要一个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)
    

相关问题