【发布时间】:2017-09-18 08:37:19
【问题描述】:
我正在尝试对 postgres 上的 4 个表执行连接查询。
表名:
scenarios_scenariopayments_invoicepayments_paymentpayments_action
(所有那些奇怪的名字都是 django 生成的 -)))
关系:
-
scenarios_scenario[有很多]payments_actions -
payments_action【有一个】payments_invoice -
payments_action【有一个】payments_payment
下面是一个有效的查询,
SELECT payments_invoice.*,
(payments_payment.to_be_paid - payments_payment.paid) as remaining, \
payments_action.identificator
FROM payments_invoice
JOIN payments_payment
ON payments_invoice.action_id = payments_payment.action_id
AND payments_payment.full_payment=2
JOIN payments_action
ON payments_invoice.action_id = payments_action.id
AND payments_action.identificator = %s
我只想从另一个表中检索相关字段并编写另一个查询,例如
SELECT
scenarios_scenario.title, payments_invoice.*, \
(payments_payment.to_be_paid - payments_payment.paid) as remaining, \
payments_action.identificator, payments_action.scenario_id
FROM payments_invoice
JOIN scenarios_scenario
ON scenarios_scenario.id = payments_action.scenario_id
JOIN payments_payment
ON payments_invoice.action_id = payments_payment.action_id
AND payments_payment.full_payment=2
JOIN payments_action
ON payments_invoice.action_id = payments_action.id
AND payments_action.identificator = 'EEE45667';
但面临这个错误 -
ERROR: missing FROM-clause entry for table "payments_action"
LINE 2: ...IN scenarios_scenario ON scenarios_scenario.id = payments_a...
^
在 SO 中寻找类似的问题 (missing FROM-clause entry for table) 但无法找到方法。任何帮助,将不胜感激。
【问题讨论】:
-
请发布您的python代码?
-
我对 python 没有任何问题。一旦我能够修复此查询,将使用
django.db.connection-)) -
您是否尝试过将您的第一个
JOIN移动到底部?在加入payments_action之前,您尝试加入scenarios_scenario。 -
感谢@Dmitriy -)) 移到底部,这有效
-
@marmeladze 虽然 SQL 没有任何问题,但 django 中的 ORM 为您做了很多。
标签: sql postgresql