Sql server 在联接中使用多个表更新多行

Sql server 在联接中使用多个表更新多行,sql-server,Sql Server,我需要更新两行,我需要使用更新。我所做的一切都失败了 我让联接和select语句工作,但它们在Update语句中不工作 Select [Order Details].ProductID From [Order Details] Inner Join Products On [Order Details].ProductID = Products.ProductID Inner join Categories On Products.CategoryID = Categories.Category

我需要更新两行,我需要使用更新。我所做的一切都失败了

我让联接和select语句工作,但它们在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
我正在使用回滚,以防我搞砸了。
非常感谢您的帮助。

我无法测试此功能,但它会满足您的需要

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

我添加了注释掉的select,因为这可以让您准确地看到更新会影响什么,并且在查询不正确时对故障排除非常有用

您的示例代码中缺少一个结束参数“)”。错误消息也会有帮助。此处使用的Group by在update语句中没有意义。我在select语句中使用Group by,因为它多次返回相同的信息。要停止重复,我使用Group By.Msg 157,级别15,状态1,第2行,UPDATE语句的集合列表中可能不会出现聚合。请研究使用返回Max(折扣)和ProductId的子查询,然后将该子查询加入到您的[Order Details]。这是我的第一个答案,影响了28行。嗯,你只有一个问题…?我试过每种代码的变体,我运行的第一个给了我这个解决方案。所以我尽力去改变,但都失败了。我只需要将其中两个项目更改为最大折扣,但受影响的不是两行而是28行。如果您只需要两行进行更改,为什么不查询最大值并手动更新需要更改的两行?[订单详细信息]有主键,对吗?此时,您已经了解了自己的数据库结构和数据的基本细节。你自己来,没问题,谢谢你的帮助。