我有一个层次结构样式的MySQL数据库设置。有4个表称为pages
,regions
,elements
和content
。页面位于顶部,内容位于底部。MySQL删除层次结构中的所有“子”元素
为了简化:具有柱
的网页:
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,这里是我的最终解决方案(基本丘尔克古尔马的代码,修改一点点):
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
使用'ON DELETE CASCADE' – zerkms 2012-03-29 01:40:36