2011-09-19 33 views
0

我有一些頁面水印使用了封閉表。我希望能夠刪除一個頁面並更新它離開的子級別。基於表012子查詢的更新表

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頁我試圖更新的水平,然後delete一個reocrds 3頁這種幸福的目標:

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

「目前,您無法更新表並從子查詢中的同一表中進行選擇。」資料來源:http://dev.mysql.com/doc/refman/5.5/en/update.html –

+0

是的,但您可以從子查詢中的同一個表中進行選擇。 – Johan

回答

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; 

As @Mark說:

當前,您無法更新表並從子查詢中的同一表中進行選擇。

來源:http://dev.mysql.com/doc/refman/5.5/en/update.html

,但你可以,如果你做內部的選擇在分次查詢。

+0

約翰 - 你iz ace! tyvm。 –