2014-11-16 2 views
0

У меня сложный вопрос о дублировании в SQL, что я мог бы использовать некоторые советы по:Как определить и удалить дубликаты в SQL, определенные подстроки

У меня есть таблица с кодами аэропортов. Однако в некоторых случаях есть дубликаты, в которых одна строка содержит идентификатор локального аэропорта, а другой - ICAO (international) ID, который включает в себя ведущий K.

мне нужно определить дубликаты, такие как: KI80 и I80 KX49 и X49

Обратите внимание, что существует множество действительных строк, которые начинаются с K.

Шаг 1: Мне нужно идентифицировать дубликаты для вышеуказанных случаев.

Шаг 2: Мне нужно использовать SQL для автоматического удаления всех дубликатов, которые имеют ведущий K.

Шаг 3: Мне нужно идентифицировать в другой таблице table b, в каких строках были использованы идентификаторы, которые я только что удалил, поэтому я могу обновить их до оставшегося ID (например: если они использовали KI80, мне нужно изменить их на I80 в новой таблице «)

Любая помощь будет высоко ценится!

+0

Если внешние ключи определены для кодов аэропорта в местах «таблицы b», вам необходимо выполнить шаг 3 перед выполнением шага 2. Шаг 2 завершится неудачно в сценарии, в котором вы пытаетесь удалить определения кода аэропорта, когда они все еще используются в качестве внешних ключей в другом месте. –

ответ

1

Вы можете использовать автообъединение в ВЕЬЕТЕ. идея заключается в том, чтобы соединить таблицу к себе, но делает матч на» K ". Если существует совпадение, то запись" K "является дубликатом:

delete t 
    from table t join 
     table tnotk 
     on t.airportID = concat('K', tnotk.airportID) and tnotk.airportID not like 'K%' 
    where t.airportID like 'K%'; 

Примечание: предполагается, что идентификаторы аэропортов, не относящихся к ИКАО, начинаются с «K».

Смежные вопросы