我有一个层次结构样式的MySQL数据库设置。共有4个表格pages
,regions
,elements
和content
。页面位于顶部,内容位于底部。
简化:
页面包含以下列:
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
答案 0 :(得分:3)
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
答案 1 :(得分:0)
内部联接可能比多个嵌套子查询更有效,请尝试此
select
c.id
from
contents as c
inner join
elements as e on c.element_id = e.id
inner join
regions as r on e.region_id = r.id
where
r.page_id = 1