2011-04-29 55 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提供的選擇中以查看區分這些行的內容應該是有用的。