2011-04-29 6 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 문

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

감사합니다. 작동합니다. 어떻게 이러한 테이블을 Burned = 1로 업데이트 할 수 있습니까? – Danpe

+1

@ Danp 응답에 UPDATE 문을 추가했습니다 –

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

+0

@dugokontov를 생각했습니다. 당신이 옳습니다. 적어도 이드가 필요합니다 (존재하기를 바랍니다) –

0

원래 선택이 귀하의 요구 사항을 충족시키지 않는 이유를 알고 싶습니다. 중복 집합 내의 모든 구성원에 대해 하나만 선택하면 업데이트 할 구성원이 있습니다. Frank Schmitt에서 제공하는 선택 항목에 AuctionId를 추가하면 이러한 행을 구별하는 데 도움이됩니다.

관련 문제