2013-11-22 122 views
1

我有以下查詢。從UPDATE刪除重複代碼

UPDATE A SET b = (SELECT b FROM B WHERE A.a_id = B.a_id AND B.value = ?) 

如果B中value =?不存在a_id,則可以用NULL填充A值。但是這沒關係,因爲在執行這個查詢之前,A.b肯定只包含NULL值。

不過,我需要更新的列數,以反映執行更新的數量。所以我把它改成:

UPDATE A SET b = (SELECT b FROM B WHERE A.a_id = B.a_id AND B.value = ?) 
WHERE EXISTS (SELECT b FROM B WHERE A.a_id = B.a_id AND B.value = ?) 

我不喜歡這個解決方案,因爲現在我有重複的代碼,必須多次填充參數。當where子句變得更復雜時,這變得更加醜陋。

有沒有擺脫這種重複代碼的方法嗎?

(順便說一句,我對甲骨文10,但我更喜歡DB獨立的解決方案)使用

+0

查找到'MERGE'聲明。 –

回答

1

Updat內連接

UPDATE A 
INNER JOIN B ON A.a_id = B.a_id 
SET A.b = B.b 
WHERE B.value = ? 

如果不與您的特定RDBMS允許,也許你可以將舊值和新值選擇到別名表格中並使用它進行更新。見Update statement with inner join on Oracle