2011-09-07 36 views
8

Tôi có 511 bản sao trong bảng của mình, tôi cần xóa các bản sao này, chứ không phải bản gốc. Vì vậy, tôi muốn xóa mọi sự xuất hiện thứ hai của mỗi bản sao.MYSQL Xóa các bản sao đầu tiên từ bảng

Tôi làm cách nào để thực hiện việc này?

TABLE:

code/ status/ time 
E3F4FF928A/0/
07D95444BB/0/ 
07D95444BB/ 0/
40006C128F/0/1315293012 
2B45790E52 /0/
40006C128F/0/1315293012 
+0

vui lòng đăng định nghĩa bảng của bạn. –

+1

Chúng có trùng lặp chính xác không hoặc bạn có khóa duy nhất ở đâu đó trong đó không? – Jason

+1

Bản sao thực sự là bản sao chính xác của bản gốc. Bạn có thực sự có bản sao, hoặc bạn có hàng mà rất nhiều dữ liệu giống hệt nhau, nhưng một cái gì đó giống như cột inc tự động hoặc ngày tạo khác nhau? – Zak

Trả lời

8

thêm một unique index bảng trên cột đó phải là duy nhất, và bỏ qua lỗi

alter ignore table X add unique index (column_a) 

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

+0

Không giải quyết * Tôi muốn xóa mọi lần xuất hiện thứ hai của mỗi lần sao chép. * –

+0

vâng điều này không thực hiện được kết quả mong muốn . –

+1

cụ thể hơn .. bạn có một b b b a .. Bạn có muốn một b c hoặc bạn muốn một b c b a? – Zak

0
DELETE t2 FROM table1 t2 
INNER JOIN table1 t1 ON 
     (t1.somefield = t2.somefield 
    AND t1.otherfield = t2.otherfield /*add more fields if need be */ 
    AND t2.id > t1.id) 
LEFT JOIN table1 t3 ON 
     (t1.somefield = t3.somefield 
    AND t1.otherfield = t3.otherfield /*add more fields if need be */ 
    AND t3.id > t2.id) 
WHERE (t3.id IS NULL) 
ORDER BY t2.id ASC 

này chỉ nên xóa bản sao thứ 2 và để lại bản sao thứ 3 và xa hơn một mình.

Nếu bạn muốn một cái gì đó ít bí truyền, và bạn có một cột dấu thời gian, có lẽ bạn muốn làm

DELETE t2 FROM table1 t2 
INNER JOIN table1 t1 ON 
     (t1.somefield = t2.somefield 
    AND t1.otherfield = t2.otherfield /*add more fields if need be */ 
    AND t2.`timestamp` > t1.`timestamp`) 
WHERE (1=1)  /*In some mode(s) MySQL requires a where clause with delete*/ 
ORDER BY t2.id ASC 
1

Chỉ cần chạy vào vấn đề này ngày hôm nay (không khóa duy nhất trong bảng).

tôi giải quyết nó như thế này

DELETE FROM table where code=x and status=y and time=z LIMIT 1; 

này sẽ xóa 1 dòng đầu tiên cho các tiêu chí nhất định (nếu bạn có n bản sao, đặt n-1 để giữ chỉ một).

+0

nó không trả lời câu hỏi – chuse

Các vấn đề liên quan