当列不为空时更新列,并在它们为空时插入

时间:2016-12-05 18:19:51

标签: mysql sql

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

目前我的更新有效,但插入内容会添加包含空值而不是testFrom值的新行。我不确定我哪里出错了,可能是我插入的加入声明吗?

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;

输出如下

enter image description here

1 个答案:

答案 0 :(得分: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;