2010-01-13 5 views
5

Tôi có thể sử dụng truy vấn SQL để tìm các bản ghi có một trường giống hệt nhau không? Đó là, tôi có thể sử dụng bảng sau đây và trả lại 1,3 (id) bằng cách so sánh các cột tên (và bỏ qua điện thoại)?Có thể cho SQL tìm bản ghi với các bản sao không?

 
    ID | Name | Phone 

    1 | Bob | 5555555555 
    2 | John | 1234567890 
    3 | Bob | 1515151515 
    4 | Tim | 5555555555

Trả lời

10

Để có được tất cả các tên đó tồn tại nhiều hơn một lần bạn có thể thực hiện tuyên bố này:

SELECT Name FROM People GROUP BY Name HAVING COUNT(*)>1; 
+1

Để nhận các ID, bạn có thể sẽ phải sử dụng câu lệnh ở trên với một câu lệnh chọn khác. Một cái gì đó như: SELECT id FROM [Table Name] WHERE NAME IN (SELECT Name FROM [Tên bảng] GROUP BY Tên CÓ COUNT (*)> 1) sẽ hoạt động –

+1

Một điều tôi muốn thêm là bạn cần phải cẩn thận khi sử dụng Tên làm số nhận dạng để quyết định xem bản ghi có trùng lặp hay không, bởi vì trừ khi bạn chắc chắn sẽ không bao giờ có hai người có cùng tên trong bảng của bạn, bạn sẽ gặp rắc rối. –

2

Để có được ID của các bản sao "1,3" nối cách sử dụng GROUP_CONCAT:

SELECT GROUP_CONCAT(ID SEPARATOR ',') 
FROM Table 
GROUP BY Name 
HAVING COUNT(*) > 1 
0

Cách khác - không nhất thiết phải hiệu quả - để thực hiện việc này là tự tham gia:

SELECT P1.Id, P2.Id 
    FROM People P1, People P2 
WHERE P1.Id < P2.Id 
    AND P1.Name = P2.Name; 

Điều kiện đầu tiên đảm bảo rằng bạn chỉ thấy cặp (1,3) chứ không phải các cặp không liên quan (3,1) hoặc các hàng giống nhau (1,1), (3,3).