Очистка таблицы MySQL от записей отсутствующих в связанной таблице.

от 2018 - 11 - 17

Расскажу вам сегодня о том, как можно очистить таблицу MySQL в один простой запрос от строк, не имеющих связей в связанной таблице.

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

Представим ситуацию, что в нашей базе данных есть таблица пользователей users а так же есть вторая таблица, содержащая названия стран countries, в которых эти пользователи проживают. Ну и, конечно, имеется третья таблица, хранящая в себе связи user_id пользователей с country_id стран users_to_countries. Мне надо было сформировать статистику количества пользователей по странам, ориентируясь на эту самую третью таблицу связей.

В ней оказалось много лишних записей с не существующими user_id в таблице users и статистика считалась с ошибками, требовалось быстро и просто очистить все лишние связи в таблице users_to_countries. Взгляните на использованный мною запрос, возможно он пригодится вам в будущем:

DELETE FROM users_to_countries 
WHERE user_id NOT IN 
       (SELECT ID 
        FROM users 
        WHERE ID is NOT NULL
       )