当从另一个表更新表或执行涉及比较两个表的查询时,我通常有一个查询的习惯,如下所示
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
答案 0 :(得分:3)
您的查询失败,因为它返回多行。也就是说,有两行或更多行符合条件。我认为从错误中可以看出这一点。你有一个标量子查询。它应该最多返回一行和一列。
第二个工作,因为允许连接具有多个匹配的行。但是,只能设置其中一个值 - 来自任意匹配行之一。在我看来,让多个匹配的行匹配并选择任意值是不好的形式。但是,它确实有效。