いくつかのテーブルで一連の左結合を実行するSQLクエリがあります。
SELECT
<some attributes>
FROM table1 t1
INNER JOIN table2 t2
ON attr = 1 AND attr2 = 1
LEFT JOIN table3 t3
ON t1.Code = t2.Code AND t3.Date_ = t1.Date_
LEFT JOIN tabl4 t4
ON t4.Code = t1.code AND t4.Date_ = t1.Date_
これまでのところ、私は持っています:
(sa.select([idc.c.Code])
.select_from(
t1.join(t2, and_(t1.c.attr == 1, t2.c.attr2 = 1))
.join(t3, t3.c.Code == t1.c.Code)))
しかし、結合をLEFT JOIN
にする方法がわかりません。
isouter=True
フラグは、LEFT OUTER JOIN
と同じLEFT JOIN
を生成します。
あなたのコードで:
(sa.select([idc.c.Code])
.select_from(
t1.join(t2, and_(t1.c.attr == 1, t2.c.attr2 = 1))
.join(t3, t3.c.Code == t1.c.Code, isouter=True)))
宣言的な例:
session = scoped_session(sessionmaker())
session.query(Model).join(AnotherModel, AnotherModel.model_id == Model.id, isouter=True)
Isouterの使用方法は次のとおりです。
select_from(db.join(Table1, Table2, isouter=True).join(Table3, isouter=True))