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

そして、次の行に沿って 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(一意ではないことに注意してください。)

これを設定するにはどうすればよいですか?

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 に答える