1

Here is an example of what I want. I have an id and I want to select * the id and all it's parent. Is it possible?

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)");
4

1 に答える 1

0

再帰的な 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

tuple戻り値のネストされたs はフラット化する必要があります。

PS: 私の知る限り、PostgreSQL のみが再帰クエリの機能を提供します。これは、ここで必要と思われるものです。

于 2013-08-21T05:40:59.370 に答える