Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy中的嵌套联接_Python_Sql_Sqlalchemy - Fatal编程技术网

Python 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 ==

如何在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 == 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)