2011-08-17 116 views
0

如何使更新查詢基於子查詢工作?
如何將子查詢中的所有這些列與update語句中的列進行比較?
有沒有一些乾淨整潔的方法來做到這一點?SQL服務器查詢如何與子查詢有多個列比較

我與它試圖查詢如下所示:

UPDATE Temp_CropData 
SET RecordStatus = 0, 
    Remarks = ISNULL(Remarks, '') +' Duplicate Records' 
WHERE 
    (SELECT Commodity ,City,Period,CropCondition 
     FROM [Temp_CropData] 
     GROUP BY DDate,Commodity,City,Period,CropCondition 
     HAVING count(*) >1) 

回答

1

試試這個:

UPDATE cd 
SET RecordStatus = 0,  
    Remarks = ISNULL(Remarks, '') +' Duplicate Records' 
FROM Temp_CropData cd 
JOIN (SELECT Commodity ,City,Period,CropCondition  
FROM [Temp_CropData]   
GROUP BY DDate,Commodity,City,Period,CropCondition   
HAVING count(*) >1) dup 
    ON cd.DDate = dup.DDate AND cd.Commodity=dup.Commodity AND cd.City = dup.City 
    AND cd.Period = dup.Period AND cd.CropCondition = dup.CropCondition 
3

嘗試使用MERGE

MERGE INTO Temp_CropData 
    USING (
      SELECT Commodity, City, Period, CropCondition 
      FROM Temp_CropData 
      GROUP 
       BY DDate, Commodity, City, Period, CropCondition 
      HAVING COUNT(*) > 1 
     ) AS source 
     ON Temp_CropData.Commodity = source.Commodity 
     AND Temp_CropData.City = source.City 
     AND Temp_CropData.Period = source.Period 
     AND Temp_CropData.CropCondition = source.CropCondition 
WHEN MATCHED THEN 
    UPDATE 
     SET RecordStatus = 0, 
      Remarks = ISNULL(Remarks, '') + ' Duplicate Records'; 

我稍微懷疑的事實,你的子查詢的SELECTGROUP BY條款不匹配,雖然(即DDate是在GROUP BY但不是SELECT)。