2013-03-09 4 views
0

У меня есть таблица MySQL Я хочу, чтобы удалить дубликаты с определенным условиемКак удалить дубликаты с определенным условием

Я хочу удалить, если имя, cl_1, cl_2, cl_3, cl_4, cl_5, cl_6, точно то же самое было бы мудрым, если бы каждый был другим, а другие столбцы были одинаковыми, и их не нужно было удалять.

, например, я хочу, чтобы удалить строки 1 и 4 не 7

id name cl_1 cl_2 cl_3 cl_4 cl_5 cl_6  
-------------------------------------------------------------- 
1 name1 T1  T2  T3  T4  T5  T6 (<< Remove) 
2 name2 L1  M2  L3  L4  T5  T6 
3 name3 T1  T2  T3  T4  T5  T6 
4 name1 T1  T2  T3  T4  T5  T6 (<< Remove) 
5 name2 T1  T2  T3  T4  T5  T6 
6 name3 T1  T2  T3  T4  T5  T6 
7 name1 T1  T2  T3  T4  T5  K6 (Not this one) 
8 name5 T1  T2  T3  T4  T5  N6 
9 name6 T1  T2  T3  T4  T5  H6 
+1

Итак, в чем проблема? Что вы пробовали? –

+0

Я не хочу быть тем парнем, но эта структура базы данных выглядит так, что ДЕЙСТВИТЕЛЬНО необходимо нормализовать ... –

+0

Это не настоящие данные, это всего лишь образец, чтобы показать вам, ребята, что я хочу, я знаю, как удалить дублировать, но это зависит от дублирования в одной колонке. Так что я хочу, чтобы проверить больше, чем один столбец, и если все были такими же, то удалите его. –

ответ

2

Это должно работать:

DELETE Y 
FROM YourTable Y JOIN 
    (
    SELECT 
    name, cl_1, cl_2, cl_3, cl_4, cl_5, cl_6 
    FROM YourTable 
    GROUP BY name, cl_1, cl_2, cl_3, cl_4, cl_5, cl_6 
    HAVING COUNT(1) > 1 
    ) T ON Y.name = T.name 
     AND Y.cl_1 = T.cl_1 
     AND Y.cl_2 = T.cl_2 
     AND Y.cl_3 = T.cl_3 
     AND Y.cl_4 = T.cl_4 
     AND Y.cl_5 = T.cl_5 
     AND Y.cl_6 = T.cl_6 

SQL Fiddle Demo

BTW - Что насчет строк 3 и 6? Кажется, это то же самое?

http://sqlfiddle.com/#!2/26b8b/1

+0

да ряды 3 и 6 такие же, и я хотел точно так же, спасибо большое –

Смежные вопросы