Postgresql 在多个关系中,如果没有关联,则从表中删除所有记录

Postgresql 在多个关系中,如果没有关联,则从表中删除所有记录,postgresql,Postgresql,我在类别和项目之间有M2M关系 items: id | name | value 1 alpha 43 2 beta 34 类别具有自引用外键 id name parent_id 1 cat1 null 2 cat1_2 1 3 cat2 null 4 cat2_1 3 categories\u项目将项目连接到类别: id category_id item_id 1 2 1 我想删除

我在
类别
项目
之间有M2M关系

items:

id | name  | value
1    alpha  43
2    beta   34
类别
具有自引用外键

id   name    parent_id
1    cat1    null
2    cat1_2  1
3    cat2    null
4    cat2_1  3
categories\u项目
项目
连接到
类别

id   category_id item_id  
1    2           1
我想删除

  • 没有关联的
    项目的类别

  • items:
    
    id | name  | value
    1    alpha  43
    2    beta   34
    
  • 但是保留
    类别
    ,这些类别有一个子类别,子类别有

  • items:
    
    id | name  | value
    1    alpha  43
    2    beta   34
    
    在上述示例中,无法删除
    cat1
    ,因为其子类别
    cat1_2
    包含
    cat2
    可以删除,因为它本身及其子类别
    cat2_1
    都没有项目

    我从以下查询开始:

    select *
    from
        categories as c
        left outer join categories_items as ci
        on ci.category_id = c.id
    where
        c.id is not null
    

    这不起作用,没有
    null
    ,因为是M2M关系,而不是FK。

    “因为是M2M关系,而不是FK”-毫无意义。多对多关系也(应该)具有外键约束查询中M2M开关表在哪里?请回答您的问题并为
    类别添加完整的CREATE table语句,
    项目
    类别_项目
    包括所有主键和外键constraints@a_horse_with_no_name我添加了更多信息。我没有添加完整的表,因为没有必要显示20个irelevant属性。是否只有1级子类别?