我有一個層次結構樣式的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