2013-08-30 65 views
-3

我有兩個表中的日期字段與需要的日期字段不匹配。試圖用另一個表中的數據更新表格

首先,我有一個查詢來返回所有需要更新日期字段的記錄列表。

SELECT distinct ID_NUMBER 
FROM a 
INNER JOIN b 
ON a.ID_NUMBER = b.ID_NUMBER 
INNER JOIN c 
ON c.ID_NUMBER = b.ID_NUMBER 
INNER JOIN d 
ON c.ID_NUMBER = d.ID_NUMBER 
WHERE d.DATE <> b.DATE 

返回20K加ID_NUMBER的

我想更新表B中ID_NUMBER =從該查詢ID_numbers名單。

嘗試:

UPDATE b 
SET d.DATE = b.DATE 
Where (select distinct ID_NUMBER 
from a 
INNER JOIN b 
ON a.ID_NUMBER = b.ID_NUMBER 
INNER JOIN c 
ON c.ID_NUMBER = b.ID_NUMBER 
INNER JOIN d 
ON c.ID_NUMBER = d.ID_NUMBER 
Where d.DATE <> b.DATE 
) 

應該直截了當。似乎無法獲得語法。幫助讚賞。

+0

[從一個表到另一SQL更新基於一個ID匹配(可能重複http://stackoverflow.com/questions/224732/sql-update-from -one-table-to-another-based-on-a-id-match) –

+0

嗨user123456,謝謝你的提問。如果您搜索該網站,您會發現類似的問題。另外請注意,您沒有包含任何關於您收到的錯誤的描述,或者您運行SQL時實際發生的情況。最後你應該注意'UPDATE b,SET d.DATE = b.DATE'是不正確的 - 它應該可能讀爲'b.DATE = d.DATE' –

回答

-1
UPDATE b 
SET d.DATE = b.DATE 
from a INNER JOIN b 
ON a.ID_NUMBER = b.ID_NUMBER 
INNER JOIN c ON c.ID_NUMBER = b.ID_NUMBER 
INNER JOIN d ON c.ID_NUMBER = d.ID_NUMBER 
Where d.DATE <> b.DATE 
0

我能夠使此更新查詢工作。您可以在SQL Fiddle上查看一些示例數據。

UPDATE b 
SET b.DATE = d.DATE 
FROM a 
INNER JOIN b ON a.ID_NUMBER = b.ID_NUMBER 
INNER JOIN c ON c.ID_NUMBER = b.ID_NUMBER 
INNER JOIN d ON c.ID_NUMBER = d.ID_NUMBER 
WHERE d.DATE <> b.DATE 

注:這是類似於@索南的答案,但SET條款需要,因爲表b正在更新設置b.DATE列,而不是d.DATE列。

+0

我確實在尋找其他解決方案。抱歉。感謝您的快速回復。執行您發送的代碼時出現此錯誤:多部分標識符「b.DATE」無法綁定。 – user2733794

+0

你使用的是什麼版本的SQL Server? –

1

由於它們都具有相同的ID_NUMBER,並且您只是在查看錶b和d,難道您不能這麼做嗎?

UPDATE b 
SET b.DATE = d.DATE 
FROM b INNER JOIN d ON b.ID_NUMBER = d.ID_NUMBER 
WHERE d.DATE <> b.DATE 
    AND d.ID_NUMBER = b.ID_NUMBER; 

SQL小提琴鏈路:http://sqlfiddle.com/#!3/a3af9/3

相關問題