MPTT(Modified Preorder Tree Traversal)メソッドを使用して階層データを格納するSQLテーブルについて考えてみます。
CREATE TABLE node (
id SERIAL NOT NULL, -- primary key
-- Nested mptt tree model.
lft INT NOT NULL,
rgt INT NOT NULL,
-- Some legacy applications still need to access parent nodes using a foreign key
parent_id INT,
FOREIGN KEY(parent_id) REFERENCES node
);
ここで、すべてのparent_id外部キーを一度に更新したいと思います。残念ながら、私のSQLスキルは本当に錆びています。誰かが私にそれを行うための効率的な方法を教えてもらえますか?
それが私が試した方法です:
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;
残念ながら、これは機能していないようです。
エラー:FROMのサブクエリは、同じクエリレベルの他のリレーションを参照できません
ヒントをありがとう。
PS:重要な場合、これはPostgreSQL上にあります。