我有一个层次结构样式的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