2013-03-21 50 views
6

Tôi muốn xóa các hàng trùng lặp dựa trên hai cột nhưng cần phải giữ 1 hàng tất cả trong số chúng.xóa các hàng trùng lặp và cần giữ một hàng từ tất cả chúng trong mysql

hàng trùng lặp có thể có nhiều hơn hai hàng như thế nào,

ID NAME PHONE 
-- ---- ---- 
1 NIL 1234 
2 NIL 1234 
3 NIL 1234 
4 MES 5989 

Tôi muốn xóa bất kỳ 2 hàng từ trên 3 và giữ 1 hàng.

+0

Ngoài ra thiết kế là thiếu sót ... nếu NIL 1234 chỉ xuất hiện khi bạn nên tạo khóa chính hoặc ít nhất là người đầu cơ để kiểm tra sự tồn tại do đó cơ sở dữ liệu của bạn vẫn phù hợp – ITroubs

Trả lời

16
DELETE a 
FROM tableA a 
     LEFT JOIN 
     (
      SELECT MIN(ID) ID, Name, Phone 
      FROM TableA 
      GROUP BY Name, Phone 
     ) b ON a.ID = b.ID AND 
       a.NAme = b.Name AND 
       a.Phone = b.Phone 
WHERE b.ID IS NULL 

Sau khi bạn đã thực hiện báo cáo kết quả xóa, thực thi một hạn chế duy nhất trên cột nên bạn không thể chèn các bản ghi trùng lặp một lần nữa,

ALTER TABLE TableA ADD CONSTRAINT tb_uq UNIQUE (Name, Phone) 
+0

bạn đang chào đón ': D' –

1
DELETE 
FROM Table 
WHERE Table.id NOT IN ( 
    SELECT MIN(idTable) idtable 
    FROM idTable 
    GROUP BY name, phone) 
+0

Xin chào Matt, tôi đã sử dụng truy vấn của bạn trong mysql như này 'DELETE TỪ tablename ĐÂU tablename.ID logic NOT IN ( SELECT MIN (ID) TỪ tablename GROUP BY tên, điện thoại) ' Nhưng tôi đang nhận được dưới đây lỗi, # 1093 - Bạn không thể xác định mục tiêu bảng 'múi giờ' để cập nhật trong mệnh đề FROM – Neel

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