SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 23.02.2015 11:54:44

lam
Участник
Зарегистрирован: 23.02.2015
Сообщений: 5

удаление дубликатов

есть несколько таблиц, таблицы связанные между собой, одно из таблиц есть дубликаты
скрипт выводит на экран дубликаты (print), надо места вывода дубликатов удалить (drop), помогите переделать скрипт

select hf0tv_fourth.* from hf0tv_fourth
left join
(select fourth_en_US, hf0tv_country_country_id, hf0tv_fifth_fifth_id, hf0tv_first_first_id,count(*) from hf0tv_fourth
group by fourth_en_US, hf0tv_country_country_id, hf0tv_fifth_fifth_id, hf0tv_first_first_id
having count(*)>1) as B
on hf0tv_fourth.fourth_en_US=B.fourth_en_US and hf0tv_fourth.hf0tv_country_country_id=B.hf0tv_country_country_id and hf0tv_fourth.hf0tv_fifth_fifth_id=B.hf0tv_fifth_fifth_id and hf0tv_fourth.hf0tv_first_first_id=B.hf0tv_first_first_id
where B.fourth_en_US is not null;

Неактивен

 

#2 23.02.2015 12:13:25

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

Re: удаление дубликатов

Что вы подразумеваете под удалением дубликатов?
Например, есть 3 одинаковых строки. Нужно удалить все 3 или одну оставить? Если оставить, то какую?

Неактивен

 

#3 23.02.2015 13:20:22

lam
Участник
Зарегистрирован: 23.02.2015
Сообщений: 5

Re: удаление дубликатов

внутри таблицы есть колонки:
id
fourth_en_US
fourth_ru_RU
fourth_fr_FR
hf0tv_country_country_id
hf0tv_fifth_fifth_id
hf0tv_first_first_id

база городов и стран, кроме id колонки fourth_en_US, fourth_ru_RU, fourth_fr_FR та же информация но на разных языках, но в таблице есть колонки которые связывает к другим таблицам ключ

есть дубликаты строки которые совпадают, но id мешает удалить дубликаты строки, поэтому используется JOIN
выше указаны скрипт выводит дубликаты, надо места вывода удалить дубликаты строки

Неактивен

 

#4 23.02.2015 13:56:08

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

Re: удаление дубликатов

Вы не ответили на мой вопрос, а ваш ответ не внес ясности.

Если вы хотите удалить строки, выводимые запросом выше, то замените
select hf0tv_fourth.* from hf0tv_fourth
на
delete hf0tv_fourth from hf0tv_fourth
http://dev.mysql.com/doc/refman/5.5/en/delete.html

P.S. вы пишите на русском или пользуетесь онлайн переводчиком?

Неактивен

 

#5 23.02.2015 15:33:11

lam
Участник
Зарегистрирован: 23.02.2015
Сообщений: 5

Re: удаление дубликатов

vasya написал:

Что вы подразумеваете под удалением дубликатов?
Например, есть 3 одинаковых строки. Нужно удалить все 3 или одну оставить? Если оставить, то какую?

из трех одинаковых удалить 2, не важно какую оставить

вы правильно заметили, я плохо разговариваю на русском


select hf0tv_fourth.* from hf0tv_fourth
на
delete hf0tv_fourth from hf0tv_fourth

выдает ошибку "1064 - You have an error in your SQL syntax"

Неактивен

 

#6 23.02.2015 16:13:04

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: удаление дубликатов

Вместо
delete hf0tv_fourth from hf0tv_fourth
попробуйте
delete from hf0tv_fourth

Try
delete from hf0tv_fourth
instead
delete hf0tv_fourth from hf0tv_fourth


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 23.02.2015 16:32:53

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

Re: удаление дубликатов

Если я правильно понимаю:
-) id уникальный идентификатор для каждой строки
-) дубликаты это строки у которых совпадают значения полей fourth_en_US, hf0tv_country_country_id, hf0tv_fifth_fifth_id, hf0tv_first_first_id
-) из каждой группы дубликатов нужно оставить одну одну произвольную строку.

Тогда

delete hf0tv_fourth from hf0tv_fourth left join
(select id from hf0tv_fourth
group by fourth_en_US, hf0tv_country_country_id, hf0tv_fifth_fifth_id, hf0tv_first_first_id) t
on hf0tv_fourth.id=t.id where t.id is null;


P.S. Для проверки выполните delete на копии таблицы.

P.P.S. Если будет ошибка синтаксиса, то пишите её полный текст.

Неактивен

 

#8 23.02.2015 16:41:00

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

Re: удаление дубликатов

deadka написал:

Вместо
delete hf0tv_fourth from hf0tv_fourth
попробуйте
delete from hf0tv_fourth

Try
delete from hf0tv_fourth
instead
delete hf0tv_fourth from hf0tv_fourth

Не, не нужно. Мой прежний совет удалил бы все строки, не оставив по одной из каждой группы дубликатов. Хорошо, что он не прошел. Видимо карма у человека хорошая.

Неактивен

 

#9 23.02.2015 20:02:51

lam
Участник
Зарегистрирован: 23.02.2015
Сообщений: 5

Re: удаление дубликатов

vasya написал:

deadka написал:

Вместо
delete hf0tv_fourth from hf0tv_fourth
попробуйте
delete from hf0tv_fourth

Try
delete from hf0tv_fourth
instead
delete hf0tv_fourth from hf0tv_fourth

Не, не нужно. Мой прежний совет удалил бы все строки, не оставив по одной из каждой группы дубликатов. Хорошо, что он не прошел. Видимо карма у человека хорошая.

не переживайте я всегда делаю backup

Неактивен

 

#10 23.02.2015 20:03:26

lam
Участник
Зарегистрирован: 23.02.2015
Сообщений: 5

Re: удаление дубликатов

vasya написал:

Если я правильно понимаю:
-) id уникальный идентификатор для каждой строки
-) дубликаты это строки у которых совпадают значения полей fourth_en_US, hf0tv_country_country_id, hf0tv_fifth_fifth_id, hf0tv_first_first_id
-) из каждой группы дубликатов нужно оставить одну одну произвольную строку.

Тогда

delete hf0tv_fourth from hf0tv_fourth left join
(select id from hf0tv_fourth
group by fourth_en_US, hf0tv_country_country_id, hf0tv_fifth_fifth_id, hf0tv_first_first_id) t
on hf0tv_fourth.id=t.id where t.id is null;


P.S. Для проверки выполните delete на копии таблицы.

P.P.S. Если будет ошибка синтаксиса, то пишите её полный текст.

огромное спасибо, все получилось ))))

Неактивен

 

Board footer

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