powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Просьба проверить запросы
3 сообщений из 3, страница 1 из 1
Просьба проверить запросы
    #39788552
Dlemfe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется таблица `mytable` вида:
id column1 column2 column31 AAA-123456789 NULL 92 AAA-123456789 Q NULL3 AAA-123456711 W 84 AAA-123456111 E 75 BBB-123456789 R 5

При дублировании по column1 необходимо обновить запись с самым меньшим id значениями строки дубликата с самым большим id.
Если значение поля дубликата NULL, то оставить значение, которое имеется.
После чего все дубликаты удалить.

Таким образом, после выполнения запроса должны получить таблицу:
id column1 column2 column3 1 AAA-123456789 Q 9 3 AAA-123456711 W 84 AAA-123456111 E 75 BBB-123456789 R 5

Обновляю, если есть дубликат
Код: sql
1.
2.
3.
4.
5.
6.
UPDATE mytable
JOIN   (SELECT t1.* FROM mytable t1 JOIN (SELECT *, COUNT(*) FROM mytable GROUP BY column1 HAVING COUNT(*) > 1) t2 ON t1.column1 = t2.column1) t3 
       ON mytable.column1 = t3.column1
SET mytable.column2 = CASE WHEN t3.column2 IS NULL THEN mytable.column2 ELSE t3.column2 end,
    mytable.column3 = CASE WHEN t3.column3 IS NULL THEN mytable.column3 ELSE t3.column3 end
WHERE mytable.id < t3.id


Удаляю дубликаты
Код: sql
1.
DELETE t1 FROM mytable t1 INNER JOIN mytable t2 WHERE t1.id  > t2.id And t1.column1 = t2.column1



Код выполняет, что мне нужно, но не уверен, что будет хорошо работать на большой таблице, и есть ощущение, что нагородил тут:
Код: sql
1.
2.
JOIN   (SELECT t1.* FROM mytable t1 JOIN (SELECT *, COUNT(*) FROM mytable GROUP BY column1 HAVING COUNT(*) > 1) t2 ON t1.column1 = t2.column1) t3 
       ON mytable.column1 = t3.column1
...
Рейтинг: 0 / 0
Просьба проверить запросы
    #39788555
Dlemfe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сервер: MySQL (Localhost via UNIX socket)
Тип сервера: MariaDB
Версия сервера: 10.0.37-MariaDB - MariaDB Server
Версия протокола: 10
...
Рейтинг: 0 / 0
Просьба проверить запросы
    #39788628
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DlemfeОбновляю, если есть дубликатОбновляй всё. Обойдёшься двумя копиями. MySQL всё равно обновляет записи только при фактическом изменении значений.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Просьба проверить запросы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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