Предполагая, что у вашей таблицы School
есть store_ID
из того, что вы сказали.
Я бы начал с определения каждого дубликата, который store_ID
вы хотите сохранить.Я также предполагаю, что вы хотите, чтобы это было самое низкое значение идентификатора.Затем я обновил бы School
s 'store_ID
, чтобы он стал MIN(store_ID)
для текущего URL, который у них есть.После этого вы можете свободно удалять store_ID
записей
. Вот как я бы поступил с обновлением:
UPDATE sch
SET sch.Store_ID = matcher.store_ID
FROM Schools AS sch
INNER JOIN Stores AS st ON sch.store_ID = st.store_ID
INNER JOIN
(
SELECT MIN(st.store_id) AS store_ID, store_url
FROM Schools AS sch
INNER JOIN Stores AS st ON sch.store_ID = st.store_ID
GROUP BY Store_URL
) AS matcher ON st.Store_URL = matcher.Store_Url
AND st.Store_ID != matcher.store_ID
Если вы можете удалить магазины, у которых нетв связанной школе следующий запрос удалит лишние строки:
DELETE FROM st
FROM Stores AS st
LEFT JOIN Schools AS sch ON st.Store_ID = sch.Store_Id
WHERE sch.Store_id IS NULL
Если вы хотите удалить только дубликаты хранилища, я бы посмотрел на этот запрос вместо приведенного выше:
DELETE FROM st
FROM Stores AS st
INNER JOIN
(
SELECT MIN(st.store_ID) store_Id, st.Store_Url
FROM Stores AS st
GROUP BY st.Store_URL
) AS useful ON st.Store_Url = useful.Store_URL
WHERE st.Store_ID != useful.store_Id