题
我的架构看起来像这样:
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
);
我想按照以下方式进行 Storm 查询
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
并不独特。)
我该如何设置?
解决方案
对于给定的 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")
不隶属于 StackOverflow