2014-03-25 63 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

非常感謝您的幫助,並以此回答您的問題。 –

相關問題