是否可以使用 Django ORM 将子查询结果与标量值进行比较?我很难转换它:
SELECT payment_subscription.*
FROM payment_subscription payment_subscription
JOIN payment_recurrent payment_recurrent ON payment_subscription.id = payment_recurrent.subscription_id
WHERE
payment_subscription.status = 1
AND (SELECT expiration_date
FROM payment_transaction payment_transaction
WHERE payment_transaction.company_id = payment_subscription.company_id
AND payment_transaction.status IN ('OK', 'Complete')
ORDER BY payment_transaction.expiration_date DESC, payment_transaction.id DESC
LIMIT 1) <= ?
要点是:
- 子查询标量值与任意参数的最后一次比较。
- 子查询和外部查询与公司 ID 之间的连接
最佳答案
Subscription.objects.annotate(
max_expiraton_date=Max('transaction__expiration_date')
).filter(
status=1,
recurrent__isnull=False, # [inner] join with recurrent
transaction__status__in=['OK', 'Complete'],
max_expiraton_date=date_value
)
这会生成其他 SQL 查询,但会获取相同的 Subscription
对象。
关于python - 具有标量值的 Django 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38022035/