Долгое время, первый пост (er?)
Мне нужно удалить несколько дублирующихся записей в моей базе данных на основе атрибутов, распределенных по нескольким таблицам.Я так и сделал, но я уверен, что есть лучший способ (я ни в коем случае не эксперт по SQL!).Любые указатели были бы великолепны.(Когда я пошел сделать это во второй раз, это не удалось)
Сначала я получаю все строки из таблицы, сортирую по дате, затем выбираю самую новую запись (dup1).Затем я сопоставляю этот список с другой таблицей на основе значения (dup2).Затем, наконец, создаем список строк на основе их идентификатора, который появляется в обеих таблицах (dup3).Затем я хочу удалить из основной таблицы, где идентификатор находится в 3-й временной таблице.
Сначала я создал временную таблицу:
create temporary table dup1
as
select * from
(SELECT hex(media_id) as asset_id, folder_id, name, ingest_date
FROM media
order by ingest_date DESC) as dup
group by name having count(name)>1 and count(hex(folder_id))>1
Затем создал вторую временную таблицу:
create temporary table dup2
as
SELECT hex(asset_id) as asset_id, value FROM datavalues where name_id = 103 group by value having count(value)>1;
as
SELECT hex(asset_id), value FROM datavalues where name_id = 103 group by value having count(value)>1;
Создана окончательная временная таблица, которая объединяет две предыдущие временные таблицы
create temporary table dup3
as
select dup1.asset_id from dup1
join dup2 on dup2.asset_id = dup1.asset_id
Затем удалила все активы из таблицы носителей, которые существуют в dup3
DELETE FROM media where hex(media_id) in (SELECT * from dup3);