使用自我加入删除记录

时间:2019-05-07 05:46:44

标签: sql sql-server database

我有一个名为VirtualFileSystem的表,该表存储项目文件夹的文件结构。它具有以下列:

id,名称,parent_id和Is_folder

其中parent_id是主列ID的外键。

现在,我需要编写一个查询来删除空文件夹,即如果未将id用作parent_id(如果未将其用作父对象表示其空文件夹)且is_folder为True,则删除记录。

我们非常感谢您的帮助。

这是示例数据,第一和第二行是文件夹,第三和第四条记录是第一行/文件夹中的文件。第二个记录/文件夹为空,因为没有记录包含其id作为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 :(得分:0)

delete from VirtualFileSystem 
where id not in 
(
   select distinct parent_id from VirtualFileSystem
)
and Is_folder = 'T'

答案 1 :(得分:0)

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