【问题标题】:Delete records with Self Join使用自加入删除记录
【发布时间】:2019-05-07 05:46:43
【问题描述】:

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

id、Name、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

【问题讨论】:

  • 提供一些样本数据

标签: sql sql-server database


【解决方案1】:
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

【讨论】:

    【解决方案2】:
    delete from VirtualFileSystem 
    where id not in 
    (
       select distinct parent_id from VirtualFileSystem
    )
    and Is_folder = 'T'
    

    【讨论】:

    • @MiroslavGlamuzina 你确定你选择了正确的自动答案吗? juergen d 成为会员已有八年多了。尽管如此,答案可能会受益于一些解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多