【问题标题】:Update columns when they're not null and insert when they are null不为空时更新列,为空时插入
【发布时间】:2016-12-05 18:19:50
【问题描述】:

我有两个数据库,testFromtestTo。它们的目的是从testFrom 中获取选择列的值并覆盖testTo 中的相同列。两个数据库都在处理同名的表dbo.People。这两个数据库的记录数不同,因此传输不会是 1:1。因此,我正在处理一个查询,该查询更新存在的行的值,并为不存在的行插入剩余数据。

目前我的更新有效,但插入将添加具有空值的新行,而不是来自testFrom 的值。我不确定我哪里出错了,会不会是我插入的 join 语句?

UPDATE to_p
    SET to_p.DottedID = from_p.DottedID, to_p.Name = from_p.Name, to_p.Colour = from_p.Colour, to_p.Food = from_p.Food
    FROM testFrom.dbo.people to_p left join testTo.dbo.People from_p on to_p.Name = from_p.Name
    WHERE from_p.Name IS NOT NULL;
INSERT INTO testTo.dbo.People (to_p.DottedID, to_p.Name, to_p.Colour, to_p.Food)
    SELECT from_p.DottedID, from_p.Name, from_p.Colour, from_p.Food
    FROM testFrom.dbo.people to_p left join testTo.dbo.People from_p on to_p.Name = from_p.Name
    WHERE from_p.Name IS NULL;

输出如下

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您正在从错误的表中选择列。更改您的 INSERT 声明,如下所示

    INSERT INTO testTo.dbo.People (DottedID, Name, Colour, Food)
        SELECT to_p.DottedID, to_p.Name, to_p.Colour, to_p.Food
        FROM testFrom.dbo.people to_p left join testTo.dbo.People from_p 
        on to_p.Name = from_p.Name
        WHERE from_p.Name IS NULL;
    

    【讨论】:

    • 在您推荐的更改后执行时显示 0 行受影响
    • @BlueBarren,是的,弄错了。如果有帮助,请参阅答案中的编辑。
    • 是的,或多或少的工作谢谢。现在我只保留了所有旧条目
    • @BlueBarren,发布一个单独的问题,说明在插入这些旧条目后您要达到什么目的。如果你摔倒了,你可以在评论中发布新问题的链接。
    • 我认为实际上可能没问题。我清除了接收数据库并运行了两次查询,它只更新了一次,因为它看到其他所有内容都已经存在。这可能只是之前的数学测试。
    猜你喜欢
    • 2021-06-18
    • 2019-05-04
    • 2017-08-26
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多