Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос на удаление дубликатов / 2 сообщений из 2, страница 1 из 1
21.07.2018, 17:33
    #39677263
ЛеонидD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов
Здравствуйте!

Перегуглил множество способов, но почему-то ни один толком не удовлетворял полностью решение поставленной задачи... пока не нашёл один, который вполне во всём устроил, однако при запросе выводит ошибку...

Существует таблица(DrTableRecords) вида:
name | steamid | ip | time_fin| mapname

Как пытался удалить:

Код: sql
1.
2.
3.
4.
5.
6.
7.
DELETE FROM DrTableRecords T1 WHERE EXISTS
   (SELECT * FROM DrTableRecords T2 WHERE
      (T2.name = T1.name or (T2.name is null and T2.name is null)) AND
      (T2.steamid = T1.steamid or (T2.steamid is null and T2.steamid is null)) AND
      (T2.ip = T1.ip or (T2.ip is null and T2.ip is null)) AND
      (T2.mapname = T1.mapname or (T2.mapname is null and T2.mapname is null)) AND
      (T2.RDB$DB_KEY > T1.RDB$DB_KEY));



Выводит ошибку:

Код: sql
1.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'T1 WHERE EXISTS (SELECT * FROM `DrTableRecords` T2 WHERE (T2.name = T1.' at line 1



Хотя, к примеру, подобный запрос на получения списка дубликатов вполне себе удачно выполнился и вывел все дублирующиеся записи
Код: sql
1.
SELECT * FROM DrTableRecords T1 WHERE (SELECT COUNT(*) FROM DrTableRecords T2 WHERE T1.name = T2.name AND T1.steamid = T2.steamid AND T1.ip = T2.ip AND T1.mapname = T2.mapname) > 1;



Строки, при записи в БД, иногда дублируются(не знаю точно, с чем это связанно), таких строк меньше 3%, но всё же их необходимо убрать, прошу помочь.


Благодарю за внимание.
...
Рейтинг: 0 / 0
21.07.2018, 19:22
    #39677267
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов
ЛеонидD,

delete в отличии от select не может в таком виде использовать алиасы.
По синтаксису идёт именно tbl_name, а не table_references
Код: sql
1.
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name


Поэтому перепишите запрос без алиасов.

Алиасы может мультитабличный delete.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос на удаление дубликатов / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]