Как очистить таблицу после пропущенных значений в другой таблице?
Я безуспешно пытался перенести установку bbPress 1.0 на новый плагин bbPress 2.0 на моем WordPress, что сильно испортило мой wp_posts
Таблица.
Я решил это, удалив все сообщения, которые несут значения topic
а также reply
к post_type
колонка, и это было хорошо.
Но теперь я заметил, что wp_postmeta
Кажется, на меня влияет множество записей, ссылающихся на сообщения, которые я удалил. Обе таблицы имеют post_id
колонка.
Вопрос в том, какую команду SQL я использую для удаления значений wp_postmeta
ссылки на линии, которые больше не на wp_posts
? Я знаю, что это какое-то соединение, которое я должен использовать, но я не понимаю, как было бы искать что-то, чего нет, и удалять его.
PS: А что случилось с таблицами WordPress, не сохраняющими ссылочную целостность? Я уверен, что можно автоматически удалить что-то из wp_postmeta
при удалении чего-либо, связанного с wp_posts
, Ну что ж…
2 ответа
Общий способ вручную удалить строки из таблицы a, которые не имеют совпадений в таблице b:
DELETE FROM table_a WHERE some_id NOT IN (SELECT some_id FROM table_b);
это может быть не самый эффективный способ массового удаления (объединения могут, вероятно, сделать это быстрее), но я обычно предпочитаю подвыбор в таких случаях, это проще для понимания и, следовательно, снижает вероятность FUBAR (вы не хотите случайно удалить строки в table_b и т. д.)
так что в вашем случае вы могли бы сделать что-то вроде этого:
SELECT * FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);
если вы уверены, что это строки, которые вы хотите удалить, замените SELECT * на DELETE:
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);
Я знаю, что это какое-то соединение, которое я должен использовать, но я не понимаю, как было бы искать что-то, чего нет, и удалять его.
Да, вы хотите использовать внешние соединения.
PS: А что случилось с таблицами WordPress, не сохраняющими ссылочную целостность?
Многие новые приложения в настоящее время используют каркасы сущностей и явно не обеспечивают ссылочную целостность, а только отношения. Например, Atlassian JIRA не обеспечивает ссылочную целостность.