Найти дубликаты в SQL и ОБНОВИТЬ их? - PullRequest
3 голосов
/ 29 апреля 2011

Я пытаюсь найти все дубликаты в таблице и изменить одно из их значений. Теперь я использую:

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

Так что я не могу обновить все строки.

Как я могу получить это так, как я показал?

Спасибо, Dan

Ответы [ 3 ]

3 голосов
/ 29 апреля 2011

Просто поместите его в запрос 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

UPDATE Bids
SET Burned = 1
WHERE Amount IN (
  SELECT Amount
  FROM Bids
  GROUP BY Amount, AuctionID
  HAVING ( COUNT(Amount) > 1 ) AND  (AuctionID=1)
)
0 голосов
/ 29 апреля 2011

Мне любопытно узнать, почему ваш оригинальный выбор не удовлетворяет вашим требованиям.Если для каждого участника в наборе дубликатов вы выбираете только один из них, то у вас есть один для обновления.Должно быть информативным добавить AuctionId к выбору, предоставленному Фрэнком Шмиттом, чтобы увидеть, чем отличаются эти строки.

0 голосов
/ 29 апреля 2011

Предположим, у вас есть идентификатор в таблице ставок:

 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...