обновить таблицу на основе подзапроса таблицы - PullRequest
0 голосов
/ 19 сентября 2011

Я использую таблицу закрытия для иерархии некоторых страниц.Я хочу иметь возможность удалить страницу и обновить уровень дочерних элементов, которые она оставляет.

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 я пытался обновить уровни и затем удалить reocrds для страницы 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 ...

1 Ответ

1 голос
/ 19 сентября 2011

Попробуйте:

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

Но вы можете выполнить внутренний выбор в под-подзапросе.

...