我正在尝试对 postgres 上的 4 个表执行连接查询。
表名:
scenarios_scenario
payments_invoice
payments_payment
payments_action
(所有这些奇怪的名字都是由 django 生成的 -)))
关系:
scenarios_scenario
[有很多]payments_action
spayments_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 中查找类似的问题( 缺少表的 FROM 子句条目),但无法找到方法。任何帮助,将不胜感激。
原文由 marmeladze 发布,翻译遵循 CC BY-SA 4.0 许可协议
在您第一次加入时,“payments_action”不是已知关系。以新连接仅使用已经“定义”的关系的方式重新排序您的连接。
这是一个小提琴,演示了这个问题:
http://sqlfiddle.com/#!17/ed147/5