2010-01-28 63 views
7

全部都是,從表b更新表a其中(條件)

實際上,這是夜晚。晚上11點左右。我的大腦正在關閉,我需要一點幫助,所以我可以完成並回家:)

我有兩個表 - 表a和表b。 當兩個其他字段匹配時,我需要使用表b中字段的值更新表a中的字段。該表不具備

基本上,我想這樣做,每個記錄:(一個唯一的ID:

update a 
set importantField = 
(select b.importantfield 
from b 
where a.matchfield = b.matchfield 
and a.matchfield2 = b.matchfield2 
) 
where a.matchfield = b.matchfield 
and a.matchfield2 = b.matchfield2 

或者至少......我覺得這就是我想做的事...

有人可以幫助我,請

回答

11

您可以通過參加在更新這樣做:

Update a 
Set a.importantField = b.importantField 
From a Join b 
    On a.matchfield = b.matchfield 
    And a.matchfield2 = b.matchfield2 
+1

先生,你是一個天才。 ...我真的很累,不想去做一個加入... 我現在可以回家了,這一切都要感謝你! D – 2010-01-28 23:31:48

+0

@Cosmic:很高興它適合你...我不得不再次檢查這個工作,最近在LINQ裏面花了太多時間:) – 2010-01-28 23:47:20

+0

我想你需要爲'a設置一個別名'表爲了這個工作,或者我錯過了什麼? – 2016-10-13 12:23:22

3

使用:

UPDATE TABLE_A 
    SET importantField = (SELECT b.importantfield 
          FROM TABLE_B b 
          WHERE b.matchfield = matchfield 
          AND b.matchfield2 = matchfield2) 

SQL Server不支持對錶的表別名更新,但上面的一個關聯查詢 - 無需附加的任期將從TABLE_A值,因爲它沒有一個表的別名b這些領域別名。

除此之外,唯一的問題是如果具有與TABLE_A匹配的記錄的記錄有多個b.importantfield值。用途:

UPDATE TABLE_A 
    SET importantField = (SELECT TOP 1 
           b.importantfield 
          FROM TABLE_B b 
          WHERE b.matchfield = matchfield 
          AND b.matchfield2 = matchfield2) 

..但你應該使用一個ORDER BY一樣好,甚至你會得到任何隨機b.importantfield值。

+0

非常感謝您抽出寶貴時間給我寫信。我最終沒有使用您的解決方案,但無論如何我要感謝您。所以謝謝 :) – 2010-01-28 23:32:51

相關問題