Окт 23

MySQL. Удаление записей с несуществующей ссылкой

Категория: Без рубрики

Предположим у нас есть 2 таблички - ПАПКИ (folders) и ФАЙЛЫ (files). У файлов есть ссылка на айдишку папки, в которой они распологаются. Предположим, что по неосторожности мы удалили несколько ненужных нам папок, но забыли удалить файлы, которые лежали в этих папках. Итак, для того, что бы удалить файлы, у которых ссылка на несуществующую папку, выполняем запрос:

delete from files
where
folder_id not in (select folder_id from folders) and folder_id <> -1

В этом примере так же учтена корневая папка (-1).

6 комментариев на данный момент

  1. comentor Октябрь 23rd, 2008 19:57

    А внешние ключи и целостность информации для чего тогда?

  2. Denis Октябрь 23rd, 2008 20:47

    Вообще, это решается прописыванием внешних ключей :)

  3. vitamin Октябрь 24th, 2008 13:20

    Использование внешних ключей конечно же помогает. Но бывают проекты, в которых БД недостаточно грамотно спроектирована и тебе приходится принять факт случившегося и пытаться с этим что-то сделать.
    Мой пример для тех случаев, когда непоправимое уже случилось :)

  4. solenko Февраль 18th, 2009 01:25

    DELETE
    files
    FROM
    files
    LEFT JOIN folders ON files.folder_id = folders.folder_id
    WHERE folders.folder_id IS NULL

  5. vitamin Февраль 18th, 2009 13:39

    Тоже вполне живой и работающий вариант. Спасибо

  6. Александр Июнь 2nd, 2009 14:41

    Мне пригодил. спасибо.

Оставить комментарий