我的查询看起来像这样(当然,在实际使用中,“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
获取订单/物品组合生产的所有阶段(操作)以及每个阶段的当前状态(进度),如果存在状态条目,则必须返回该状态,但状态行必须为空。
我在SQLAlchemy中遇到了很大的问题。这本来是一个两部分的问题,但是我已经在这里找到了用纯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()
我将保持此处的开放,以便如果有更好的解决方案或任何见解时能及时补充。