如果使用带有FROM语句的别名更新并且FROM语句中使用的JOIN意味着SET操作将有多个可能的值,那么为什么SQL Server允许UPDATE发生?它似乎从可能的集合中选择了最高值,但这不是一致的方法,所以为什么声明不会失败呢?
示例:
CREATE TABLE #Updated (ID_Unq INT, Value CHAR(1));
CREATE TABLE #UpdateFrom (ID_Non_Unq INT, Value CHAR(1));
INSERT INTO #Updated (ID_Unq, Value) VALUES
(1,'A'),
(2,'B'),
(3,'C');
INSERT INTO #UpdateFrom (ID_Non_Unq, Value) VALUES
(1,'A'),
(1,'B'),
(2,'C'),
(2,'D'),
(3,'E'),
(3,'F');
SELECT *
FROM #Updated a
JOIN #UpdateFrom b ON a.ID_Unq = b.ID_Non_Unq;
UPDATE a
SET Value = b.Value
FROM #Updated a
JOIN #UpdateFrom b ON a.ID_Unq = b.ID_Non_Unq;
SELECT * FROM #Updated;
答案 0 :(得分:1)
SQL将允许许多不确定的操作 如果没有订单条款,退回的订单可能会发生变化 处理的第一行(和最后一行)可能会更改
而不是让SQL猜测执行只返回单个值的更新
e.g。
UPDATE a
SET Value = max(b.Value)
FROM #Updated a
JOIN #UpdateFrom b ON a.ID_Unq = b.ID_Non_Unq
GROUP BY a.Value;