Mysql 从具有相同名称记录的源表更新TargetTable中的记录

Mysql 从具有相同名称记录的源表更新TargetTable中的记录,mysql,insert,insert-update,Mysql,Insert,Insert Update,我正在尝试使用TableB中的记录更新TableA,但仅限于TableA中没有已存在具有相同名称列值的记录的情况。我有这样的查询,但是我想做的是在“匹配”记录存在但字段x/y/z中没有值的情况下,现有记录将更新。例如: 目标表| Bob | NULL | NULL | 来源表|鲍勃|纽约|医生 由于“Bob”存在,因此目标表不会创建新记录,但现有记录将添加new York和Doctor,因为这些字段为NULL或空您可以使用on duplicate key update选项来插入。首先在名称上

我正在尝试使用TableB中的记录更新TableA,但仅限于TableA中没有已存在具有相同名称列值的记录的情况。我有这样的查询,但是我想做的是在“匹配”记录存在但字段x/y/z中没有值的情况下,现有记录将更新。例如:

  • 目标表| Bob | NULL | NULL |
  • 来源表|鲍勃|纽约|医生

由于“Bob”存在,因此目标表不会创建新记录,但现有记录将添加new York和Doctor,因为这些字段为NULL或空

您可以使用
on duplicate key update
选项来插入。首先在
名称
上创建唯一索引,因此不允许重复:

create unique index TargetTable_name on TargetTable(name);
然后:


太好了,谢谢你。我正在尝试创建唯一索引,结果发现已经存在重复。不确定是否将此作为一个不同的问题发布,但现在我需要找到重复项,并将具有值的重复项保留在指定字段中,并除去其他重复项。相反,我需要确保我删除的那些记录没有被其他带有ParentID字段的记录引用。我没有意识到这张桌子内部乱七八糟,但这就是我必须处理的一切。@MarkH。作为一个单独的问题,连同样本数据和你想用它做什么。将非常感谢你的帮助,将此标记为你的回答。
insert into TargetTable(name, col1, col2)
    select name, col1, col2
    from SourceTable
    on duplicate key update col1 = coalesce(TargetTable.col1, values(col1)),
                            col2 = coalesce(TargetTable.col2, values(col2));