假设我有两个类ChildA
和ChildB
,它们都与Parent
有关系。
还假设我已经定义了两个查询qa
和qb
,它们查询相应的子类。
我希望加入qb
加入qa
parent
。
如果parent
只是普通列,我可以执行以下操作:
subquery = qb.subquery()
joined_query = qa.join(subquery, AliasedChildA.parent==subquery.columns.parent)
此处,AliasedChildA
是ChildA
的别名。 (我可以完全控制查询的创建方式,但不能控制以后应用于它们的过滤器。)
但现在,由于parent
是一种关系,因此它不包含在subquery.columns
中。
我如何加入qa
和qb
加入parent
?
答案 0 :(得分:1)
如果您有复合pk,请使用AliasedChildA.parent_id == subquery.c.parent_id
(and_
几个子句尝试。)
答案 1 :(得分:1)
尝试以下方法:
qa = session.query(ChildA)
qb = session.query(ChildB)
# @note: *qa* and *qb* may include other filters etc,
# but assuming they do not contain joins on *Parent*
subquery = qb.subquery()
qry = qa.join(Parent).join(subquery)
答案 2 :(得分:0)
query_a.subquery().join(query_b.subquery(), $on_condition...)
为我工作:)