当更新从另一个表或查询执行涉及比较两个表,我通常有查询像下面这两个查询有什么区别?
UPDATE dbo.Table1 SET COL =
(
SELECT i.colid FROM
dbo.Table2 i
WHERE i.did = dbo.Table1.did and
i.[pdate] = dbo.Table1.pdate and
i.pamount = dbo.Table1.pay and
i.[Ref No ] = dbo.Table1.refno and
i.[cNo ] = dbo.Table1.receipt
)
,最近的习惯上面让我失望。它返回一个错误,说查询返回超过1记录/行。然而,我的上级查询如下,它的工作原理。我仍然不知道为什么我的失败和他的成功。为什么它从未让我失望过?
UPDATE dbo.Table1 SET COL = i.colid
from
dbo.Table2 i
WHERE i.did = dbo.Table1.did and
i.[pdate] = dbo.Table1.pdate and
i.pamount = dbo.Table1.pay and
i.[Ref No ] = dbo.Table1.refno and
i.[cNo ] = dbo.Table1.receipt
如果''where'标准的'Table2'中没有重复数据,那么您的原始查询不会失败。但是,一旦'Table2'匹配多行,就会收到错误信息。您可以通过在子查询中使用'SELECT TOP 1'来使原始查询工作。我认为'JOIN'比'相关子查询'更可取。 – sgeddes 2014-09-23 02:55:52
谢谢先生。令我困惑的是,他也肯定会返回一个副本。那他为什么通过? – 2014-09-23 02:59:28