【发布时间】:2011-09-19 21:12:29
【问题描述】:
我正在为某些页面层次结构使用闭包表。我希望能够删除一个页面并更新它离开的子页面的级别。
par child level
1 1 0
1 2 1
2 2 0
1 3 2
2 3 1
3 3 0
1 4 3
2 4 2
3 4 1
4 4 0
在删除第 3 页之前,我尝试更新关卡,然后删除第 3 页的记录,目标是:
par child level
1 1 0
1 2 1
2 2 0
1 4 2
2 4 1
4 4 0
用一个(无效的)子查询来描述这个,像这样:
UPDATE tbl_page_structures
SET page_level = page_level - 1
WHERE
child IN ( SELECT child FROM tbl_page_structures WHERE par = 3 )
AND page_level != 0;
DELETE ... where par=3 or child=3;
显然更新失败了。
理想情况下希望在一个查询中完成,但如果 tmp 能够完成,那么就这样吧 - 性能比甜蜜的 sql 甜蜜更重要...
【问题讨论】:
-
"目前,您无法更新表并在子查询中从同一个表中进行选择。"来源:dev.mysql.com/doc/refman/5.5/en/update.html
-
可以,但是您可以在子子查询中从同一张表中进行选择。
标签: mysql transitive-closure-table