Найти потерянные строки в трех таблицах - PullRequest
0 голосов
/ 26 августа 2011

У меня есть древовидные таблицы, которые имеют связь тегов со структурой статьи.

Древовидные таблицы

1. tagnames_with_id
2. tag_id_relationship_with_article_id
3. article_with_id

Теперь, иногда при удалении статьи также удаляются связи тегов статьи, но теперь проблема в том, что иногда, когда трансформация не завершается должным образом, в таблицах содержатся данные, которые не используются.

  1. Как мне найти все идентификаторы тегов, которые не связаны таблицы, но в таблице тегов и удалить их? Это теги, чьи отношения были удалены.

  2. Как найти все идентификаторы тегов в таблице отношений а не в таблице тегов и удалить их? это теги, которые были удалены, но их связь все еще существует.

  3. Как найти все идентификаторы статей, которые находятся в отношениях, но не в таблице статей? это отношения тег с статьи, которые были удалены, но их отношения тега все еще существует.

Спасибо

Ответы [ 2 ]

4 голосов
/ 26 августа 2011

Вот общий ответ на этот вопрос:

select * from child_table
where parent_id not in (select id from parent_table)

Этот синтаксис будет работать для каждой базы данных, которую я знаю

0 голосов
/ 26 августа 2011

Аналогичен ответу Богемяна, но используется:

select * from child_table where not exists 
(select null from parent_table where child_table.parent_id = parent_table.id)
...