【问题标题】:Update all parent id's in a SQL mptt table更新 SQL mptt 表中的所有父 ID
【发布时间】:2010-08-11 08:36:54
【问题描述】:

考虑一个 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 上。

【问题讨论】:

    标签: sql postgresql mptt


    【解决方案1】:

    其实我找到了办法:

    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;
    

    不确定这是否是最有效的方法,但它足够快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      相关资源
      最近更新 更多