SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 24.03.2010 15:18:29

gumanok
Участник
Зарегистрирован: 26.12.2008
Сообщений: 7

Удаление строк с повторами

Подскажите, пожалуйста, как составить запрос.

profession    |    name
-----------------------------
машинист    |    Петр
машинист    |    Егор
кочегар    |    Петр
кочегар    |    Николай
кочегар    |    Алексей
трубочист    |    Дмитрий
трубочист    |    Егор

В таблице нужно удалить и перенести в другую таблицу все строки с повторяющимися именами (name) вне зависимости от профессии (profession).

Т.е. должно остаться это:

profession    |    name
-----------------------------
кочегар    |    Николай
кочегар    |    Алексей
трубочист    |    Дмитрий

+ еще одна таблица

profession    |    name
-----------------------------
машинист    |    Петр
машинист    |    Егор
кочегар    |    Петр
трубочист    |    Егор

Мой предел это SELECT `name` from `table` group by `name` having count(*) > 1
Заранее спасибо.

Неактивен

 

#2 24.03.2010 20:49:08

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

Re: Удаление строк с повторами

Ваш запрос выбирает из таблицы повторяющиеся имена.
Сначала создаете вторую таблицу с повторяющимися именами:

CREATE TABLE `table2` SELECT * FROM `table1` WHERE `name` IN (SELECT name FROM `table1` GROUP BY name HAVING count(*)>1);

Затем удаляете повторяющиеся имена из первой используя объединение со второй таблицей, так как использовать подзапрос IN (SELECT ..) как в первом случае не получится:

DELETE `table1` FROM `table1` LEFT JOIN `table2` USING(name) WHERE `table2`.`profession` IS NOT NULL;

Подробности тут

Неактивен

 

#3 25.03.2010 09:34:09

gumanok
Участник
Зарегистрирован: 26.12.2008
Сообщений: 7

Re: Удаление строк с повторами

Спасибо, работает!

Неактивен

 

Board footer

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