如何以“更多 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 中。