gpt4 book ai didi

sql-server - 当 UPDATE 的结果不明确时,为什么 SQL Server 不会失败?

转载 作者:行者123 更新时间:2023-12-03 01:27:25 24 4
gpt4 key购买 nike

我有两个表,一个更新目的地:

create table dest (value int)
insert into dest values (0)

和来源:

create table source (value int)
insert into source values (4)
insert into source values (1)

如果我运行此查询:

UPDATE dest SET value = (select value from source WHERE 1=1)

SQL Server 失败并显示:

Subquery returned more than 1 value. This is not permitted when 
the subquery follows =, !=, <, <= , >, >= ...

这是完美的。但如果我运行这个查询:

UPDATE dest SET value = source.value FROM dest INNER JOIN Source ON 1=1 

...它从源中随机选择一个值并用它更新目标。

可怕吗?有没有解释一下?

最佳答案

是的,您的第一个查询失败的原因与运行此查询的更新语句无关:

select * from dest
where value = (select value from source)

当您的子查询使用任何运算符(例如 =、!= 等)时...您不能返回多个结果。如果您想说给我 dest 中的所有值,其中匹配值位于源中,那么您可以使用 In 子句:

select * from dest
where value in (select value from source)

至于问题的第二部分,单元格只能有一个值,因此您所做的就是一遍又一遍地替换它。这是完全正确的。

正如您所指出的,无法确定将选择哪一行,这确实使这一点变得有趣,特别是考虑到如果内存服务于不同版本的 SQL 选择不同的行(我认为旧版本使用了最后一行,而现在它们使用第一行)。

关于sql-server - 当 UPDATE 的结果不明确时,为什么 SQL Server 不会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/650328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com