子查询中的 sqlalchemy 表冒泡到外部查询中
Posted
技术标签:
【中文标题】子查询中的 sqlalchemy 表冒泡到外部查询中【英文标题】:sqlalchemy table from subquery bubbling up into outer query 【发布时间】:2017-02-09 23:10:56 【问题描述】:事实:
我正在编写一个使用子查询的 sqlalchemy 查询。 查询正在尝试提取一些用户信息,而子查询提供了一些其他表的计数,这些表我正在尝试加入外部表。 我期望的结果是一个用户名,其中包含付款表中的计数。我的问题是,第一个 FROM 子句引用了“付款”,当它没有理由包含在发出的 SQL 中时,它出现在内部查询中。
为什么 SQL alchemy 会将内部表中的引用拉到外部表中?
发出的 SQL
SELECT users.name , anon_1.count
FROM payment, users
LEFT OUTER JOIN (
SELECT count(payment.creator_id) AS count, payment.creator_id AS creator_id
FROM payment
INNER JOIN accounts ON accounts.id = payment.account_id
INNER JOIN companies ON companies.id = accounts.company_id
WHERE payment.approver_id IS NOT NULL
GROUP BY creator_id
) AS anon_1
ON users.id = anon_1.creator_id
Python
subquery = self.db.query(*[func.count(Payment.creator_id).label('count'),
Payment.creator_id.label('creator_id')]). \
join(Account, Account.id == Payment.account_id). \
join(Company, Company.id == Account.company_id). \
filter(Payment.approver_id != None). \
group_by('creator_id'). \
subquery()
query = self.db.query(*[func.concat(User.last_name, User.first_name), sub.c.count]). \
outerjoin(subquery, User.id == sub.c.creator_id)
编辑 1
我发现我可以从子查询中删除两个连接和过滤器,问题仍然存在。
【问题讨论】:
【参考方案1】:我找到了答案。稍后在代码中的某处,将过滤器添加到查询中。
【讨论】:
以上是关于子查询中的 sqlalchemy 表冒泡到外部查询中的主要内容,如果未能解决你的问题,请参考以下文章