假设您正在对一个表运行 UPDATE 语句,但您放入此基表的信息来自其他一些辅助表。通常,您会加入数据并且不希望 UPDATE 语句的 FROM 子句中的行成倍增加,从而保持一个新行映射到基表中的一个旧行。
但是我想知道如果您的 JOIN 表以某种方式模棱两可会发生什么,就像您不能将每个基本实体映射仅考虑到一个连接实体一样。或者,如果您做了一些荒谬的事情,例如将基表连接到其子表的表,并使用该信息更新基表。它会如何选择?现在每个基表行有多个行。
我在 SQL Server 2005 中运行了这样的语句,它似乎选择了每组中的第一行。但这对我来说似乎是错误的。它不应该引发错误吗?为什么这是理想的行为?
示例代码
-- normal
-- categories are one-to-many bundles
update bundles_denormalized set category = c.description
from bundles_denormalized b
left join categories c
on b.category_id = c.id
-- ambiguous
-- bundles are one-to-many products
update bundles_denormalized set category = p.description
from bundles_denormalized b
left join products p
on b.id = p.bundle_id