从表A中删除,其中表A中没有子项,表B中没有子项

伯尼·戴维斯(Bernie Davies)

我有一个用于简单树分类的传统父/子表,还有一个用于链接到类别的页面的“页面”表:

    **Table: cat**
    c_id
    c_name
    parent_id

    **Table: page**
    p_id
    page_name
    c_id

仅当cat表中没有子类别并且page表中没有子页面时,我才想执行删除操作我知道如何通过首先计数和检查来做到这一点。但是,想知道是否可以在单个查询中很好地实现它并获取受影响的行。

我已经尝试过了,但是它不起作用,因为我认为不允许在删除查询中从目标表中进行选择?

    DELETE 
    FROM cat
    WHERE c_id=x
    AND NOT EXISTS (
    SELECT count( DISTINCT p_id ) as pages                       
    FROM page
    WHERE c_id =x
    )
    AND NOT EXISTS (
    SELECT count( DISTINCT c_id ) as children                       
    FROM cat
    WHERE parent_id =x
    );
约阿希姆·伊萨克森(Joachim Isaksson)

即使从联接表中删除,DELETE JOIN也将起作用。在这里,我们左联接以检查是否存在任何连接(c2是可能的父级,p是可能的引用页)

最后,我们只删除没有连接的行(即,连接返回为NULL);

DELETE c1
FROM cat c1
LEFT JOIN cat c2 
  ON c1.c_id = c2.parent_id
LEFT JOIN page p
  ON c1.c_id = p.c_id
WHERE c2.parent_id IS NULL
 AND p.c_id IS NULL
 AND c1.c_id = 1

要使用进行测试的SQLfiddle

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在tsql中删除没有行的表

来自分类Dev

如何使用 JavaScript 在 DOM 元素中迭代所有子项,包括那些没有标记的子项

来自分类Dev

表A中没有表B中的SQL查找记录

来自分类Dev

如果WPF中没有子项,则隐藏Expander ToggleButton

来自分类Dev

列表中的子项没有正确更新?(反应/预先)

来自分类Dev

如果WPF中没有子项,则隐藏Expander ToggleButton

来自分类Dev

在MySQL / MariaDB关系表中获取给定父节点的所有子项(及其子项)

来自分类Dev

删除对象数组中的所有子项

来自分类Dev

在DOM表中追加子项

来自分类Dev

从表A中获取表b中没有外键条目的所有元素

来自分类Dev

列出和删除C#中的注册表子项

来自分类Dev

删除其他表中没有引用的行

来自分类Dev

列出表A中的记录,其中表B中只有一个关系,表C中具有一个关系

来自分类Dev

如何在JavaScript中创建带有子项且没有重复值的对象数组

来自分类Dev

有没有办法在 Github 中处理子项目?

来自分类Dev

SQL:根据表B中的列值查找表A中没有表B中值的所有记录

来自分类Dev

遍历注册表并获取所有子项和C#中RegistryKey中的值

来自分类Dev

从 StackPanel 中删除子项

来自分类Dev

在没有where子句的情况下计算yii2中表中的所有记录

来自分类Dev

在SQL中获取递归表的子项

来自分类Dev

在注册表子项中搜索值

来自分类Dev

在SQL中获取递归表的子项

来自分类Dev

如何删除存储桶中对象的所有“子项”?

来自分类Dev

查找表中没有的值

来自分类Dev

没有从表中获得行总和

来自分类Dev

没有斜线存储在mysql表中

来自分类Dev

oracle中没有行的表

来自分类Dev

“表中没有可用数据”VueJS

来自分类Dev

没有写在excel表中

Related 相关文章

热门标签

归档