2011-08-17 40 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)。