我正在使用某个页面层次结构的闭包表。我希望能够删除一个页面并更新它离开的孩子的级别。
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页的reocrds,这样做的目标是:
par child level
1 1 0
1 2 1
2 2 0
1 4 2
2 4 1
4 4 0
用这样的(无效)suquery来描述这个:
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甜蜜......
答案 0 :(得分:1)
尝试:
UPDATE tbl_page_structures
SET page_level = page_level - 1
WHERE
child IN (SELECT * FROM( SELECT child FROM tbl_page_structures WHERE par = 3 ))
AND page_level != 0;
DELETE ... where par=3 or child=3;
正如@Mark所说:
目前,您无法更新表并从子查询中的同一表中进行选择。
来源:http://dev.mysql.com/doc/refman/5.5/en/update.html
但是如果你在子子查询中进行内部选择,你可以。