0

我的架构看起来像这样:

CREATE TABLE plans (
    id SERIAL PRIMARY KEY,
    description text
);

CREATE TABLE projects (
    id SERIAL PRIMARY KEY,
    project_id character varying(240) UNIQUE,
    plan_id integer REFERENCES plans(id) ON DELETE CASCADE
);

我想按照以下方式进行风暴查询

plan = store.find(Plan, Plan.project_id == "alpha")
# should translate to something like
# SELECT p.* from plans p LEFT JOIN projects proj ON p.id = proj.plan_id
#     WHERE proj.project_id = 'alpha';

(请注意,这projects.plan_id不是唯一的。)

我该如何设置?

4

1 回答 1

2

对于给定的 SQL,没有太多理由使用左连接,因为您的 where 子句不会匹配没有相应项目的任何行。您可以通过以下方式获得结果:

result = store.find(Plan, Plan.id == Project.plan_id, Project.project_id == "alpha")

这将为您提供一个 ResultSet 对象。给定您的架构,看起来您需要一行,因此您可以通过以下方式访问它:

plan = result.one()

或者将它们绑在一起:

plan = store.find(Plan, Plan.id == Project.plan_id, Project.project_id == "alpha").one()

如果你真的需要做一个左连接,那么它的语法应该是这样的:

result = store.using(LeftJoin(Plan, Project, Plan.id == Project.plan_id)).find(
    Plan, Project.project_id == "alpha")
于 2010-07-21T06:34:00.570 回答