2016-04-01 24 views
-1

これは、ormではなく、コア用であることに注意してください。いくつかのいずれかが、これらの2つの質問で私を助けることができるsqlachemy core:内部結合と複数結合のしくみ

ホープ:

1)outerjoinとプレーンjoinをがあるようですが、どのように1は内部結合を行うのですか?

2)複数の結合を実行する構文は何ですか。私は1つの結合を行うことができましたが、複数の結合の構文を確認できませんでした。

select([...]).select_from(outerjoin(a, b)) 

をしかし、それは、2つの加入行うには、この構文については、いくつかのエラーを生成します:作品

私の第一の参加は、このようになり、事前に

select([...]).select_from(outerjoin(a, b).select_from(outerjoin(ma, tr)) 

感謝を。

答えて

1
  1. joinデフォルトではINNER JOINです。 outerjoinは、引数isouter=Truejoinを呼び出します。私たちの希望のSQLクエリは

    SELECT a.col1, b.col2, c.col3 
    FROM a 
    LEFT JOIN b ON a.col1 = b.col1 
    LEFT JOIN c ON c.col1 = b.col2 
    

    ある場合

その後SQLAlchemyのコア文は次のようになります。

select(
    [a.c.col1, b.c.col2, c.c.col3] 
).select_from(
    a.outerjoin(
     b, a.c.col1 == b.c.col1 
    ).outerjoin(
     c, b.c.col2 == c.c.col1 
    ) 
) 
  • on clauseは関係が定義されている場合は必要ありませんとですあいまいではありません。 (あなたが参加する簡単なために行ったように)
  • outerjoin機能は、すなわち

    outerjoin(outerjoin(a, b), c) 
    

    、チェーンではなく、入れ子にすることができますが、私はその形式が読みにくく見つけます。