我有这个子查询:
aliasBilling = aliased(Billing)
subQueryReversesBilling = db.session.query(BillingReversal).select_from(BillingReversal).with_entities(BillingReversal.reverses_billing_id).filter(BillingReversal.billing_id == aliasBilling.id).subquery()
生成:
SELECT billing_reversal.reverses_billing_id
FROM billing_reversal, billing AS billing_1
WHERE billing_reversal.billing_id = billing_1.id
如何去掉我没有指定的连接(逗号样式(,因为它为整个表和每个记录创建了一个连接。显然,它假设我在过滤部分(where子句(中需要它,但我从稍后的较大查询中获取了该表。这就是为什么它是一个子查询。我需要的是:
SELECT billing_reversal.reverses_billing_id
FROM billing_reversal
WHERE billing_reversal.billing_id = billing_1.id
交叉联接来自filter子句中的别名Billing表。
如果BillingReversal
和Billing
与一个关系(和一个外键(链接,则应该利用此关系和join
,而不是filter
。
subQueryReversesBilling = (
db.session.query(BillingReversal)
.join(Billing, BillingReversal.billing)
.with_entities(BillingReversal.id)
.subquery()
)