Обновить запрос в SQL с дубликатами записей
У меня есть таблица (миллионы записей) с уникальным индексом для (dataid,url). Таблица выглядит так:
id dataid url
1 230 https://www.example.com/123
3 230 http://example.com/123
Я не могу выполнить запрос
UPDATE table_name SET url = REPLACE(url, 'http://', 'https://www.')
так как есть дубликаты и нарушение ограничения уникального ключа. В таком случае я хочу удалить запись с наибольшим значением 'id'. Как мне это сделать?
4 ответа
delete
from table a
join table b on a.dataid = b.dataid
where
a.dataid = 230 and a.id > b.id;
попробуй это
delete tst
where id in (select max(id)
from tst
group by dataid, REPLACE(url, 'http://', 'https://www.')
having count(*) = 2);
UPDATE tst SET url = REPLACE(url, 'http://', 'https://www.');
Во-первых, вы должны удалить дубликаты. Этот запрос должен помочь вам:
delete from
table_name
where id in (
select max(id)
from table_name
group by REPLACE(url, 'http://', 'https://www.')
having count(*) > 1
)
Это выяснит строку, которая должна быть удалена
select max(id), REPLACE(url, 'http://', 'https://www.') as url from table
group by REPLACE(url, 'http://', 'https://www.')
having count(*)>1
Это удалит их
delete t1 from table as t1 inner join
(
select max(id), REPLACE(url, 'http://', 'https://www.') as url from table
group by REPLACE(url, 'http://', 'https://www.')
having count(*)>1
) as t2 on t1.id=t2.id
Теперь обновите ваши данные
UPDATE table_name SET url = REPLACE(url, 'http://', 'https://www.')