私のクエリは次のようになります(もちろん、「3」と「4」は実際の使用では異なります):
SELECT op_entries.*, op_entries_status.*
FROM op_entries
LEFT OUTER JOIN op_entries_status ON op_entries.id = op_entries_status.op_id AND op_entries_status.order_id = 3
WHERE op_entries.op_artikel_id = 4 AND op_entries.active
ORDER BY op_entries.id
これは、ステータス エントリが存在する場合、商品/注文の組み合わせの生産におけるすべての段階 (作業) と、各段階の現在のステータス (進行状況) を取得するためのものです。そうでない場合でも、ステージを返す必要がありますが、ステータス行は null になります。
これをSQLAlchemyで再生するのに没頭する問題があります。これは 2 つの部分からなる質問でしたが、プレーン SQL でこれを行う方法は既に見つかりました。ORM では、それは別の話です。ドキュメントで JOIN ON 条件を作成する方法さえわかりません。
編集 (新規ユーザーは自分の質問に回答することはできません):
私はそれを解決したと信じています。質問が助けになったので書き留めると思います! たぶん、これは他の初心者を助けるでしょう。
query = db.session.query(OpEntries, OpEntriesStatus).\
outerjoin(OpEntriesStatus, db.and_(
OpEntries.id == OpEntriesStatus.op_id,
OpEntriesStatus.order_id == arg_order_id)).\
filter(db.and_(
OpEntries.op_artikel_id == artidQuery,
OpEntries.active)).\
order_by(OpEntries.id).\
all()
誰かがより良い解決策や洞察を得た場合に備えて、これを開いたままにしています。