Удалить записи с Self Join - PullRequest
0 голосов
/ 07 мая 2019

У меня есть таблица VirtualFileSystem, в которой хранится файловая структура папки проекта. Имеет столбцы ниже:

id, Name, parent_id и Is_folder

где parent_id - это внешний ключ для идентификатора первичного столбца.

Теперь мне нужно написать запрос на удаление пустых папок, то есть удалить записи, если id не используется в качестве parent_id (если его не использовать в качестве родителя означает его пустую папку), а is_folder - True.

Любая помощь высоко ценится.

Вот примеры данных, первая и вторая строки - это папки, третья и четвертая записи - это файлы, присутствующие в первой строке / папке. Вторая запись / папка пуста, поскольку ни одна запись не содержит свой идентификатор в качестве parent_id. Итак, я хочу написать запрос для удаления второй строки.

id, name,     parent_id, is_folder
-------------------------------
1,   folder1, null,       T
2,   folder2, null,       T
1_0, file0,   1,          F
1_1, file1,   1,          F

Ответы [ 2 ]

0 голосов
/ 07 мая 2019
DELETE A
FROM VirtualFileSystem AS A
LEFT JOIN VirtualFileSystem AS B
    ON A.id = B.parent_id
WHERE A.is_folder = 'T'
    AND B.id IS NULL
0 голосов
/ 07 мая 2019
delete from VirtualFileSystem 
where id not in 
(
   select distinct parent_id from VirtualFileSystem
)
and Is_folder = 'T'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...