2012-02-15 3 views
1

적절한 행을 반환하는 중첩 된 선택 쿼리가 있습니다. 쿼리는 레코드 집합을 작성하고이를 테이블과 비교하여 테이블에없는 레코드를 쿼리에서 반환합니다.예기치 않게 TSQL 업데이트 쿼리가 작동합니다.

select 쿼리를 업데이트 쿼리로 변환했습니다. 쿼리에서 반환 된 행을 테이블에 채우려고합니다. 업데이트 쿼리를 실행할 때 업데이트 할 행이 0으로 반환됩니다. 왜 선택 쿼리가 레코드를 반환하고 업데이트 쿼리에서 동일한 코드를 사용하고 있는지 이해할 수 없습니다.

감사

선택 쿼리 (이 여러 기록을 반환)

Select * 
From 
(SELECT DISTINCT 
ProductClass,SalProductClass.[Description],B.Branch,B.BranchDesc,B.Salesperson,B.Name, 
CAST(0 AS FLOAT) AS Rate,'N' AS Split 
FROM (SELECT SalBranch.Branch,SalBranch.[Description] AS BranchDesc,A.Salesperson,A.Name 
     FROM (SELECT DISTINCT 
      Salesperson,Name 
      FROM SalSalesperson 
      ) A 
     CROSS JOIN SalBranch 
    ) B 
CROSS JOIN SalProductClass 
) C 
Left Outer Join RateComm On 
RateComm.ProductClass = C.ProductClass and 
RateComm.Branch = C.Branch And RateComm.Salesperson = C.Salesperson 
Where RateComm.ProductClass is Null 

업데이트 쿼리 : (이 제로 기록을 반환)

UPDATE RateComm 
SET RateComm.ProductClass=C.ProductClass,RateComm.ProdClassDesc=C.ProdClassDesc, 
RateComm.Branch=C.Branch,RateComm.BranchDesc=C.BranchDesc,RateComm.Salesperson=C.Salesperson, 
RateComm.Name=C.Name,RateComm.Rate=C.Rate,RateComm.Split=C.Split 
    FROM (SELECT DISTINCT 
      ProductClass,SalProductClass.[Description] AS ProdClassDesc,B.Branch,B.BranchDesc,B.Salesperson,B.Name, 
      CAST(0 AS FLOAT) AS Rate,'N' AS Split 
      FROM (SELECT SalBranch.Branch,SalBranch.[Description] AS BranchDesc,A.Salesperson,A.Name 
       FROM (SELECT DISTINCT 
         Salesperson,Name 
         FROM SalSalesperson 
        ) A 
       CROSS JOIN SalBranch 
       ) B 
      CROSS JOIN SalProductClass 
     ) C 
    LEFT OUTER JOIN RateComm ON C.ProductClass=RateComm.ProductClass AND 
    C.Salesperson=RateComm.Salesperson AND C.Branch=RateComm.Branch 
    WHERE RateComm.ProductClass IS NULL 

답변

2

은 '아무튼 무엇을 업데이트하기는 어렵습니다 존재하지 않습니다. 대신 INSERT 쿼리를 사용해 보셨습니까?

+0

고맙습니다. 나는 그것을 간과하고있는 단순한 것이라는 것을 알고 있었다. – user1212337

+0

이것이 대답이라면 대답으로 표시한다. – Paparazzi

관련 문제