【问题标题】:sqlalchemy table from subquery bubbling up into outer query子查询中的 sqlalchemy 表冒泡到外部查询中
【发布时间】: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

我发现我可以从子查询中删除两个连接和过滤器,问题仍然存在。

【问题讨论】:

    标签: sqlalchemy


    【解决方案1】:

    我找到了答案。稍后在代码中的某处,将过滤器添加到查询中。

    【讨论】:

      猜你喜欢
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 2012-11-09
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多