Обновить запрос в 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.')
Другие вопросы по тегам