【发布时间】:2017-06-08 15:15:52
【问题描述】:
我正在尝试在 SQL Server 上使用带有 JOIN 的 UPDATE 语句。
如果我运行下面的 SELECT 语句,它会返回 42 行。
SELECT * FROM [dbo].[Imported] i
inner join [DaisyCompare].[dbo].[Baseline] b
on
b.[CLI]=i.[CLI] AND
b.[Quantity]=i.[Quantity] AND
b.[UnitCost]=i.[UnitCost] AND
b.[TotalCost]=i.[TotalCost] AND
b.[Description]=i.[Description]
WHERE b.[CLI]=i.[CLI] AND
b.[Quantity]=i.[Quantity] AND
b.[UnitCost]=i.[UnitCost] AND
b.[TotalCost]=i.[TotalCost] AND
b.[Description]=i.[Description]
但是,当我在更新语句(如下)中使用它作为条件时,查询会更新 44 条记录。
update [DaisyCompare].[dbo].[Baseline]
set Disposition = ('Match')
where exists (
SELECT * FROM [dbo].[Imported] i
inner join [DaisyCompare].[dbo].[Baseline] b
on
b.[CLI]=i.[CLI] AND
b.[Quantity]=i.[Quantity] AND
b.[UnitCost]=i.[UnitCost] AND
b.[TotalCost]=i.[TotalCost] AND
b.[Description]=i.[Description]
WHERE b.[CLI]=i.[CLI] AND
b.[Quantity]=i.[Quantity] AND
b.[UnitCost]=i.[UnitCost] AND
b.[TotalCost]=i.[TotalCost] AND
b.[Description]=i.[Description] )
大概是我的语法错误,但我不确定在哪里。
非常感谢任何帮助。
【问题讨论】:
-
因为您的 EXISTS 逻辑正在检查行是否存在并且没有相关性。我会摆脱 EXISTS 并只使用连接。另外,这里的 where 子句有什么意义?它已经在连接谓词中处理。
标签: sql sql-server join