2015-06-11 22 views
5

Tôi có một bộ sưu tập 2,00,00 hàng dữ liệu trong bảng MySQL của tôi. Bây giờ tôi muốn loại bỏ bản ghi trùng lặp thứ 2 trong một bảng. (ví dụ:) Không được xóa bản ghi đầu tiên của giá trị trùng lặp. Chỉ xóa bản ghi trùng lặp thứ hai trong một bảng vale.Xóa bản ghi trùng lặp thứ hai trong bảng mySql

Ví dụ

id | logEntry | logValue 
-------------------------------- 
1 | AA15AA7515 | 11445588 
2 | AAFIRNNFIE | 99586454 
3 | AA15AA7515 | 14589313 
4 | AA9894AF56 | 15985632 
5 | AA15AA7515 | 16124246 
6 | AA69481533 | 15454186 
7 | AAFIRNNFIE | 12788549 

Trong ví dụ này Id của (1,3,5), (2,7) có chứa các bản sao. Tôi muốn loại bỏ các hàng 3,5,7

Dự kiến ​​Output

id |  Entry | Value 
-------------------------------- 
1 | AA15AA7515 | 11445588 
2 | AAFIRNNFIE | 99586454 
4 | AA9894AF56 | 15985632 
6 | AA69481533 | 15454186 
+0

Và sự cố là gì? – Goikiu

+1

Bạn đã thử một cái gì đó chưa? – Mat

+0

Bạn đã thử mọi thứ chưa? – cars10m

Trả lời

6
delete from temp1 where id in (select x.id from (select a.id from temp1 a, 
temp1 b where a.id<>b.id and a.logentry=b.logentry and a.id>b.id group by 
a.id) x); 

này sẽ hoạt động tốt.

Kiểm tra tại đây: http://www.sqlfiddle.com/#!9/825e0/1

+0

Cảm ơn bạn .. Nó hoạt động .. –

5

Cố gắng này

Delete From table_name 
where id not in(select min(id) from table_name 
group by Entry) 
+0

n đơn giản hiệu quả –

6

Bạn có một bảng với hàng trùng lặp - Bằng cách nào đó một chỉ số duy nhất đã không nhận được được tạo và một lỗi đã thêm bản ghi trùng lặp vào bảng của bạn.

Cần thay đổi bảng bằng cách thêm ràng buộc UNIQUE.

Bạn có thể sử dụng truy vấn này như sau:

DELETE from table1 
USING table1, table1 as vtable 
WHERE (NOT table1.ID>vtable.ID) 
AND (table1.logEntry=vtable.logEntry) 

Bạn nên chạy truy vấn này để đảm bảo rằng không có mục trùng lặp có thể xảy ra hơn nữa trong bảng:

ALTER TABLE table ADD CONSTRAINT table_unique UNIQUE (field1,field2); 

nhưng bạn có thể làm điều này nếu bảng trống.

hoặc nếu hồ sơ tồn tại, hãy thử thêm IGNORE

ALTER IGNORE TABLE table ADD CONSTRAINT table_unique UNIQUE (field1,field2); 

LƯU Ý: Trong trường hợp nếu bạn đang chèn dữ liệu sử dụng kịch bản phía máy chủ (có vẻ như bạn đang sử dụng php như gắn thẻ) sau đó sử dụng xác nhận của kỷ lục tồn tại trong bảng quá.

+0

Giải thích được mong đợi sẽ giúp người dùng SO trong tương lai gặp phải câu trả lời này. –

+0

Để đảm bảo rằng bản sao có ID cao hơn bị xóa, bạn nên sử dụng 'WHERE (table1.ID> vtable.ID)' ... – cars10m

2

Đây là một chút đau đớn trong MySQL. Tôi sẽ làm điều này bằng cách sử dụng left join

delete t 
    from table t left join 
     (select min(id) as minid 
      from table t2 
      group by entry 
     ) tokeep 
     on t.id = tokeep.minid 
    where tokeep.minid is null; 
Các vấn đề liên quan