使用相同名称记录从源表更新TargetTable中的记录

时间:2014-03-25 15:32:19

标签: mysql insert insert-update

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

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

目标表不会创建自“Bob”存在以来的新记录,但现有记录将添加New York和Doctor,因为这些字段为NULL或为空/

1 个答案:

答案 0 :(得分:1)

您可以使用on duplicate key update insert选项执行此操作。首先在name上创建一个唯一索引,因此不允许重复:

create unique index TargetTable_name on TargetTable(name);

然后:

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));