Удалить записи, соответствующие критериям таблицы данных - PullRequest
0 голосов
/ 16 октября 2018

Долгое время, первый пост (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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...