Sql-Server
使用聯接以更有效的方式編寫更新
如何以“更多 sql”的方式使用聯接編寫此更新?有人告訴我這是奇怪的編碼:
-- Updates recipient's account UPDATE table1 SET balance = balance + @amount WHERE accountID = @recipientID AND -- check if a currency is the same in both accounts ( SELECT t.CurrencyID FROM table1 t WHERE t.accountID = @payerID ) = ( SELECT t.CurrencyID FROM table1 WHERE t.accountID = @recipientID );
您可以在 CurrencyID 上使用 INNER JOIN 將 table1 重新連接到自身,但將要更新的表過濾為 accountID = @recipientID 的記錄,並且在 accountID = @payerID 的地方過濾連接的表
以這種方式,只有滿足兩個表的 WHERE 子句且同時匹配 CurrencyID 值的記錄才會包含在 UPDATE 中。
UPDATE t1 SET t1.balance = t1.balance + @amount FROM table1 t1 INNER JOIN table1 t2 ON t1.CurrencyID = t2.CurrencyID WHERE t1.accountID = @recipientID AND t2.accountID = @payerID