使用连接中的多个表更新多个行

时间:2014-01-27 17:51:46

标签: sql-server

我需要更新两行,我需要使用更新。我所尝试过的都失败了。

我得到了连接和选择语句,但它们在Update语句中不起作用。

Select [Order Details].ProductID
From [Order Details] Inner Join Products
On [Order Details].ProductID = Products.ProductID
Inner join Categories
On Products.CategoryID = Categories.CategoryID
Where CategoryName = 'Confections' and Unitsinstock > 50
Group By [Order Details].ProductID

此声明找到了我需要更新的内容,但是当我使用它时,它将无效。

Begin Transaction
Go
Update [Order Details]
Set Discount = (SELECT Max(Discount))
FROM [Order Details] 
Right Join Products
    On [Order Details].ProductID = Products.ProductID
    Inner join Categories
        On Products.CategoryID = Categories.CategoryID
        Where CategoryName = 'Confections' and Unitsinstock > 50
Group By [Order Details].ProductID
Go
RollBack Transaction

我正在使用回滚只是因为我搞砸了。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

我无法对此进行测试,但它应该能满足您的需求。

Update [Order Details]
Set Discount = DiscountsPerProduct.MaxDiscount
      --select OD.Discount, DiscountsPerProduct.MaxDiscount, *
From [Order Details] OD
Inner Join (
    Select Max([Order Details].Discount) as MaxDiscount, [Order Details].ProductID
    From [Order Details] 
    Inner Join Products On Products.ProductID = [Order Details].ProductID
    Inner join Categories On Products.CategoryID = Categories.CategoryID
    Where CategoryName = 'Confections' and Unitsinstock > 50
    Group By [Order Details].ProductID
) DiscountsPerProduct On OD.ProductID = DiscountsPerProduct.ProductID

我添加了注释掉的选项,因为这可以让您准确了解更新会受到什么影响,并且在查询尚未正确时对故障排除很有用。