mysql中删除多行元素_MySQL删除层次结构中的所有“子”元素

我有一个层次结构样式的MySQL数据库设置.有4个表,分别称为页面,区域,元素和内容.页面在顶部,内容在底部.

为了简化:

页面具有以下列:

id

地区具有以下列:

id

page_id

元素具有以下列:

id

region_id

内容具有以下列:

id

element_id

我希望能够仅使用页面的ID来删除页面的所有子代.

到目前为止,我已经能够使用嵌套的select语句使用页面的ID来选择底部的内容,但是不会选择元素,区域或页面.

SELECT * FROM `content` WHERE `element_id` IN (

SELECT `id` FROM `elements` WHERE `region_id` IN (

SELECT `id` FROM `regions` WHERE `page_id` IN (

SELECT `id` FROM `pages` WHERE `id` = 1

)

)

)

无论如何要有效地做到这一点?谢谢.

感谢@Hago和@Churk,这是我的最终解决方案(基本上是Churk的代码,做了一些修改):

DELETE `content`, `elements`, `regions` FROM `content`

JOIN `elements` ON `elements`.`id` = `content`.`element_id`

JOIN `regions` ON `regions`.`id` = `elements`.`region_id`

JOIN `pages` ON `pages`.`id` = `regions`.`page_id`

WHERE `pages`.`id` = 1

解决方法:

DELETE FROM content

JOIN elements ON elements.id = content.element_id

JOIN regions ON regions.id = elements.region_id

JOIN pages ON pages.id = regions.page_id

WHERE pages.id = 1

标签:mysql

来源: https://codeday.me/bug/20191201/2081625.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值