Python SQLAlchemy中的嵌套联接
如何在SQLAlchemy中进行嵌套联接?我想说的是Python SQLAlchemy中的嵌套联接,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,如何在SQLAlchemy中进行嵌套联接?我想说的是 SELECT a.col1, a.col2, c.col3 FROM a LEFT OUTER JOIN (b INNER JOIN c ON c.col4 = b.col4) ON b.col5 = a.col5 我需要显示A中的所有记录,但只能将它们与B中那些可以与C连接的记录连接起来 到目前为止,我掌握的代码是 session.query(a.col1, a.col2, c.col3).outerjoin(b, b.col5 ==
SELECT a.col1, a.col2, c.col3
FROM a
LEFT OUTER JOIN (b INNER JOIN c ON c.col4 = b.col4) ON b.col5 = a.col5
我需要显示A
中的所有记录,但只能将它们与B
中那些可以与C
连接的记录连接起来
到目前为止,我掌握的代码是
session.query(a.col1, a.col2, c.col3).outerjoin(b, b.col5 == a.col5).all()
这让我得到了我所需要的大部分内容,A
记录在缺少B
记录的地方显示空值;但是,有太多的B
s进入,我需要限制它们。但是,如果我只是添加另一个连接,即
session.query(a.col1, a.col2, c.col3).outerjoin(b, b.col5 == a.col5).join(c, b.col4 == c.col4).all()
它会删除B
中所有具有空值的A
记录
我应该指出,我不能直接将A
连接到C
,因为两者之间的唯一连接是通过B
实现的,这是最简单的:
如果您展示了更多的模型定义,特别是表之间关系的性质,那么可能会有一个更优雅的解决方案
subq = (session.query(b.col5).join(c, c.col4 == b.col4)).subquery("subq")
qry = session.query(a).outerjoin(subq, a.col5 == subq.c.col5)
print(qry)