2014-10-30 53 views
0

表1 列的數據表1:ID,名稱要更新考慮表2

表2 列:ID,狀態。

如何提出請求更新Table1.name爲Table1.id ='some_id'如果Table2.id = Table1.id和Table2.status ='some_status'?

在此先感謝。

+0

爲什麼你需要在一個單獨的表?它是否適用於具有「id,name,status」列的單個表格? – carlosherrera 2014-10-30 14:46:30

+0

表格的結構不能改變。 – slider 2014-10-30 14:48:42

+1

看看這個[問題](http://stackoverflow.com/questions/224732/sql-update-from-one-table-to-another-based-on-a-id-match)。 – programmer43229 2014-10-30 14:51:12

回答

1
update Table1 set Table1.name = 'XXX' 
where Table1.id = 'some_id' 
    and exists (select 1 from Table2 where Table2.id = Table1.id and Table2.status = 'some_status'); 

的存在任何行的子查詢存在關鍵字測試的東西。 如果未找到行,則答案爲FALSE。否則,子查詢 返回TRUE。 NOT EXISTS反轉結果。

注意整個子查詢被執行,即使需要EXISTS僅 知道子查詢是否不返回任何行 - 因此,使用與返回大量行的子查詢EXISTS提防 。

值得注意的是,這種查詢有時被稱爲 「半連接」。 semijoin是一個SELECT語句,它使用EXISTS 關鍵字將表中的行與另一個表中的行進行比較。

除了它的被用於表1的每一行執行相關查詢

在許多情況下,EXISTS可能會取代IN,而且通常比IN更有利。

+0

請爲您的代碼添加一些解釋。僅有代碼的答案有時足夠好,但代碼+解釋答案總是更好 – Barranka 2014-10-30 15:49:30

+0

確切地說,這是必要的。謝謝! – slider 2014-10-31 10:18:15