【问题标题】:recursive lookup? [duplicate]递归查找? [复制]
【发布时间】:2013-08-21 04:49:47
【问题描述】:

这是我想要的一个例子。我有一个 id,我想select * id 和它的所有父级。有可能吗?

cn.Execute("create table if not exists Link( id INTEGER PRIMARY KEY AUTOINCREMENT , `parent`  INT , `val`  INT  NOT NULL , FOREIGN KEY (parent) REFERENCES Link(id));", new { });
cn.Execute("insert into Link(val) values(3)");
cn.Execute("insert into Link(parent, val) values(last_insert_rowid(), 5)");
cn.Execute("insert into Link(parent, val) values(last_insert_rowid(), 9)");
var id = cn.Query<long>("select last_insert_rowid()", new{});
cn.Execute("insert into Link(parent, val) values(last_insert_rowid(), 8)");
cn.Execute("insert into Link(val) values(4)");

【问题讨论】:

  • @bsa 使用按钮“标记”链接标记为重复

标签: sqlite


【解决方案1】:

递归 sql 函数可能会有所帮助。我遇到了这个非常具体的需求,谢天谢地,因为我使用的是 SQLAlchemy(ORM),所以我通过以下方式实现了这一点:

class Link(Base):
    def parents(self):
        # print self.parent
        # print self.parent_id
        if not self.parent:
            return None
        else:
            return self.parent, self.parent.parents

返回中嵌套的tuples 必须被展平。

PS:只有 AFAIK 的 PostgreSQL 提供递归查询的功能,这是我猜这里需要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2018-06-25
    • 2012-07-17
    • 2015-12-16
    • 2011-05-04
    • 1970-01-01
    相关资源
    最近更新 更多