рассмотрим таблицу SQL, в которой иерархические данные хранятся с использованием MPTT (модифицированный предварительный заказ Обход дерева).
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, если это имеет значение.