我正在使用northwind数据库,我编写了一个查询,将Quantity
减少了20%并将Discount
设置为给定值:
update dbo.[Order Details]
set Quantity = round(0.8 * Quantity, 0), Discount = 0.5
where exists (
select *
from dbo.Orders o
where o.OrderID = dbo.[Order Details].OrderID and
o.OrderDate > '1997-05-15'
)
select * from dbo.[Order Details]
似乎工作得很好。我决定尝试使用join
执行相同的操作,而不是绑定where
中的两个表。我想出了这个:
update dbo.[Order Details]
set Quantity = round(0.8 * Quantity, 0), Discount = 0.4
where exists (
select *
from dbo.Orders o join dbo.[Order Details] od on o.OrderID = od.OrderID
where o.OrderDate > '1997-05-15'
)
select * from dbo.[Order Details]
此查询更改了[Order Details]
表中的每条记录 - 这对我来说很奇怪,因为子查询选择了与第一个查询相同条件的记录。
为什么这两个以不同的方式工作?
修改 这个查询似乎做了我想要的和第一个查询的作用。
update dbo.[Order Details]
set Quantity = round(0.8 * Quantity, 0), Discount = 0.1
where OrderID in (
select o.OrderID
from dbo.Orders o inner join dbo.[Order Details] od on o.OrderID = od.OrderID
where o.OrderDate > '1997-05-15'
)
select * from dbo.[Order Details]
答案 0 :(得分:1)
这将是您的第3个版本使用来自内部联接的更新.. SQL Server
update d
set Quantity = round(0.8 * Quantity, 0), Discount = 0.5
from dbo.[Order Details] d
inner join dbo.Orders o
on o.OrderID = d.OrderID
where
o.OrderDate > cast('1997-05-15' as date)