2011-04-29 88 views
3

我正试图在表格中找到所有重复项并更改其值之一。 现在我用:在SQL中查找重复项并更新它们?

SELECT Amount 
FROM Bids 
GROUP BY Amount, AuctionID 
HAVING (COUNT(Amount) > 1) AND (AuctionID=1) 

是只返回

Amount 
23.6500 
41.8800 
42.3500 

而且不

Amount 
23.6500 
23.6500 
41.8800 
41.8800 
42.3500 
42.3500 

所以我不能更新所有行的问题。

我怎么能按照我展示的方式获得它?

感谢, 丹

回答

3

只是把它包装IN询问里面:

SELECT Amount 
FROM Bids 
WHERE Amount IN (
    SELECT Amount 
    FROM Bids 
    GROUP BY Amount, AuctionID 
    HAVING (COUNT(Amount) > 1) AND (AuctionID=1) 
) 

更新:加入UPDATE语句

UPDATE Bids 
SET Burned = 1 
WHERE Amount IN (
    SELECT Amount 
    FROM Bids 
    GROUP BY Amount, AuctionID 
    HAVING (COUNT(Amount) > 1) AND (AuctionID=1) 
) 
+0

谢谢,它的工作原理。 现在我怎么可以更新这些表设置烧= 1? – Danpe 2011-04-29 12:09:45

+1

@Danpe我已将UPDATE语句添加到答案 – 2011-04-29 12:12:19

0

假设您在投标表所具有的ID:

SELECT Amount 
FROM Bids b1 
WHERE AcutionId = 1 
AND EXISTS (Select 1 from Bids b2 
      WHERE b2.AuctionID = b1.AuctionId 
      AND b1.Amount = b2.Amount 
      AND b1.Id <> b2.Id) 
+0

您的存在永远是真实的。也许你认为'b2.Id!= b1.Id' – dugokontov 2011-04-29 11:59:27

+0

@dugokontov,你是对的,至少需要Id(希望它存在) – 2011-04-29 12:03:29

0

我很想知道为什么您的原始选择不符合您的要求。如果对于一组重复中的每个成员,您只选择其中一个成员,那么您需要更新一个成员。将AuctionId添加到Frank Schmitt提供的选择中以查看区分这些行的内容应该是有用的。