2012-03-05 11 views
11

Tôi đã viết mã này để tìm bản sao và nó hoạt động tốt:Return all rows trùng lặp

SELECT * 
FROM StyleTable 
GROUP BY Color 
HAVING count(*) > 1 

Vấn đề là, nó chỉ trở về một trong những hàng trùng lặp. Có thể trả lại tất cả các hàng trùng lặp không? Tôi đoán nó có thể có một cái gì đó để làm với 'GROUP BY' nhưng tôi không chắc chắn làm thế nào để thay đổi nó. Tôi không muốn xóa các giá trị, chỉ cần trả lại chúng.

+0

Tôi nghĩ rằng SQL này sẽ không chạy, trừ khi màu là cột duy nhất trong bảng STyleTable. – theglauber

Trả lời

15

Bạn phải tham gia lại bảng để nhận được các bản sao tôi nghĩ. Một cái gì đó như:

SELECT * 
FROM StyleTable 
WHERE Color IN (
    SELECT Color 
    FROM StyleTable 
    GROUP BY Color 
    HAVING count(*) > 1 
)  
+0

Cảm ơn, điều này đã hiệu quả. Tôi sẽ chấp nhận trong một vài phút khi tôi có thể. – XSL

5
SELECT s.* 
    FROM StyleTable s 
     INNER JOIN (SELECT Color 
         FROM StyleTable 
         GROUP BY Color 
         HAVING COUNT(*) > 1) q 
      ON s.Color = q.Color