рассмотрим таблицу 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;
К сожалению, это не похоже на работу:
ОШИБКА: подзапрос в ОТ не может ссылаться
к другим отношениям того же уровня запроса
Спасибо за любые подсказки.
PS: это на PostgreSQL, если это имеет значение.