2014-03-25 62 views
0

我试图用TableB中的记录更新TableA,但只有TableA中没有记录的已存在名称列值相同。我有查询会这样做,但是我想要做的是在'匹配'记录存在但没有Fieldx/y/z中现有记录将更新的值的情况下。例如:从具有相同名称记录的源表中更新TargetTable中的记录

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

目标表将不会有新的纪录产生,因为“鲍勃”存在,而在现有的记录将有纽约和医生加入,因为这些字段是空或空/

回答

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

性优异谢谢。我正在尝试创建独特的索引,事实证明已经有一些愚蠢的东西。不知道是否将这个问题作为一个不同的问题发布,但现在我需要找到愚蠢的东西,并保留那些在指定字段中有值的人并摆脱其他人。相反,我需要确保我摆脱的那些没有被其他记录与ParentID字段引用。我没有意识到这张桌子在内部是如此混乱,但这是我必须与之合作的。 –

+0

@MarkH。 。 。请把它作为一个单独的问题,以及样本数据和你想要做的事情。 –

+0

非常感谢您的帮助,并以此回答您的问题。 –

相关问题