在SQL中查找重复项并更新它们?

3

我想找出表格中的所有重复值,并更改它们中的一个值。 现在我使用的是:

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个回答

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)
)

谢谢,它有效。 现在我该如何更新这些表以将Burned设置为1? - Danpe
1
@Danpe 我已经在答案中添加了UPDATE语句。 - Frank Schmitt

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)

你的条件始终为真。也许你认为 b2.Id != b1.Id - dugokontov
@dugokontov,你是对的,至少需要一个ID(希望它存在)。 - Michael Pakhantsov

0

我很好奇为什么你原来的选择不满足你的要求。如果在一组重复数据中,你只选择其中的一个成员进行更新,那么你就有一个需要更新的目标。将拍卖ID添加到Frank Schmitt提供的选择中,可以看出这些行之间的区别,这应该会很有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接