2014-01-27 2 views
0

두 행을 업데이트해야하며 업데이트를 사용해야합니다. 내가 시도한 것은 모두 실패했다.조인에서 여러 테이블을 사용하여 여러 행 업데이트

조인과 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 

롤백 기능을 사용하고 있습니다. 도움을 주시면 감사하겠습니다.

+1

샘플 코드에서 닫는 괄호 ")"가 누락되었습니다. 오류 메시지도 도움이됩니다. –

+0

Group by는 여기에서 사용하는 것처럼 업데이트 구문에서 의미가 없습니다. –

+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

나는 각 코드의 변형을 시도해 보았고, 처음으로이 코드를 실행 해 보았습니다. 그래서 최선을 다하려고했지만 모두 실패했습니다. 최대 할인율로 변경하려면 항목 중 2 개가 필요하지만 대신 2 개 대신 28 개의 행이 영향을받습니다. –

관련 문제