2010-08-11 3 views
0

considérez une table SQL qui stocke des données hiérarchiques à l'aide de la méthode MPTT (Modified Preorder Tree Traversal). Maintenant, je voudrais mettre à jour toutes les clés étrangères parent_id en même temps. Malheureusement, mes compétences SQL sont vraiment rouillé. Quelqu'un peut-il me signaler un moyen efficace de le faire?Mettez à jour tous les ID parents dans une table SQL mptt

C'est la façon dont je l'ai essayé:

UPDATE node AS main 
SET main.parent_id=ss.id 
FROM (
    SELECT parent.id 
    FROM node AS parent 
    WHERE main.lft BETWEEN parent.lft AND parent.rgt 
    ORDER BY parent.lft DESC) ss; 

Malheureusement, cela ne semble pas fonctionner:

ERROR: subquery in FROM cannot refer to other relations of same query level

Merci pour tout conseils. PS: C'est sur PostgreSQL, si c'est important.

Répondre

0

En fait, j'ai trouvé une façon de le faire:

UPDATE node 
SET parent_id=ss.id 
FROM (
    SELECT id, lft, rgt 
    FROM node ORDER BY lft DESC) ss 
WHERE ss.lft < node.lft AND ss.rgt > node.rgt; 

Je ne sais pas si c'est la façon la plus efficace de le faire, mais il est assez rapide.

Questions connexes