2014-01-27 80 views
0

我需要更新兩行,我需要使用更新。我所嘗試過的都失敗了。使用連接中的多個表更新多行

我得到了連接和選擇語句,但它們在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

你在示例代碼中缺少一個關閉paren「)」。錯誤信息也會有幫助。 –

+0

分組方式,因爲您在這裏使用它,在更新聲明中沒有意義。 –

+0

我在select語句中使用了group by,因爲它多次返回相同的信息。要停止使用Group By的重複項。 –

回答

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 

我加了註釋掉選擇,因爲這可以讓你看到什麼將被更新的影響,是用於故障排除查詢的時候還沒有正確的。

+0

這給了我第一個答案,28行受到影響。 –

+0

恩,你只有一個問題......? –

+0

我已經嘗試過每個代碼的變體,我跑的第一個代碼給了我這個解決方案。所以我試圖儘可能地改變它,但都失敗了。我只需要其中的兩個項目即可更改爲最大折扣,但相反,只有28行受到影響,而不僅僅是兩個。 –