SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.11.2010 17:48:48

10ton
Участник
Зарегистрирован: 27.11.2010
Сообщений: 4

помогите составить запрос и удалить дубли в таблице на MySQL?

есть таблица table со столбцами c1,c2,c3. все столбцы типа integer.
есть строки с разными и одинаковыми значениями c1 и c2 , а так же с разными или одинаковыми c3.
нужно оставить только одну строку если одинаковые c1 и c2, причем такую где c3 было бы минимальным значением
помогите пожалуйста.

Неактивен

 

#2 27.11.2010 18:15:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: помогите составить запрос и удалить дубли в таблице на MySQL?

mysql> select * from a;
+------+------+------+
| c1   | c2   | c3   |
+------+------+------+
|    1 |    1 |    1 |
|    1 |    1 |    2 |
|    1 |    2 |    1 |
+------+------+------+
3 rows in set (0.17 sec)

mysql> create temporary table b (c1 int, c2 int, c3 int);
Query OK, 0 rows affected (0.14 sec)

mysql> insert into b select c1,c2,min(c3) from a group by c1,c2 having count(*)>1;
Query OK, 1 row affected (0.09 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> delete a,b from a join b using(c1,c2,c3);
Query OK, 2 rows affected (0.03 sec)

mysql> select * from a;
+------+------+------+
| c1   | c2   | c3   |
+------+------+------+
|    1 |    1 |    2 |
|    1 |    2 |    1 |
+------+------+------+
2 rows in set (0.00 sec)

mysql> drop table b;
Query OK, 0 rows affected (0.19 sec)

Неактивен

 

#3 27.11.2010 18:17:23

10ton
Участник
Зарегистрирован: 27.11.2010
Сообщений: 4

Re: помогите составить запрос и удалить дубли в таблице на MySQL?

спасибо. но несовсем то нужно.
нужно чтобы в выборке осталось в первой строке у вас 1 1 1 а не 1 1 2 . нужно минимальное из столбца c3

Неактивен

 

#4 27.11.2010 18:27:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: помогите составить запрос и удалить дубли в таблице на MySQL?

delete a from a join b on a.c1=b.c1 and a.c2=b.c2 and a.c3<>b.c3;

Неактивен

 

#5 27.11.2010 18:38:44

10ton
Участник
Зарегистрирован: 27.11.2010
Сообщений: 4

Re: помогите составить запрос и удалить дубли в таблице на MySQL?

этот запрос все равно удаляет максимальное и оставляет с одинаковыми c3.
если c1,c2,c3 одинаковые у строк то одну из этих строк оставить(остальные такие удалить). и если c3 разные то оставить ту строку у которой минимальное c3.

Неактивен

 

#6 27.11.2010 18:53:40

10ton
Участник
Зарегистрирован: 27.11.2010
Сообщений: 4

Re: помогите составить запрос и удалить дубли в таблице на MySQL?

c1 c2 c3
1 1 3
1 1 2
1 1 3
1 1 2
2 1 5
1 2 1

нужно получить
1 1 2
2 1 5
1 2 1

т.е. чтобы не было дублей по c1 и c2,  т.е. если c1 и c2 равны то берем по минимальному c3 но если c3 равны то оставляем одну строку.

Неактивен

 

#7 27.11.2010 19:16:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: помогите составить запрос и удалить дубли в таблице на MySQL?

Тогда проще всего:

create table new_table (c1 int, c2 int, c3 int);

insert into new_table select t.* from (select * from a order by c1,c2,c3) t,(select @i:=0,@p1:=0,@p2:=0) x where if((@p1=c1) and (@p2=c2),@i:=@i+1,(@i:=0) or ((@p1:=c1) and (@p2:=c2))) and @i<1;

drop table a;

rename table new_table to a;
 

Пояснения в теме http://sqlinfo.ru/forum/viewtopic.php?id=1742

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson