Postgres:缺少表的 FROM 子句条目

新手上路,请多包涵

我正在尝试对 postgres 上的 4 个表执行连接查询。

表名:

  • scenarios_scenario
  • payments_invoice
  • payments_payment
  • payments_action

(所有这些奇怪的名字都是由 django 生成的 -)))

关系:

  • scenarios_scenario [有很多] payments_action s
  • 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 中查找类似的问题( 缺少表的 FROM 子句条目),但无法找到方法。任何帮助,将不胜感激。

原文由 marmeladze 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

在您第一次加入时,“payments_action”不是已知关系。以新连接仅使用已经“定义”的关系的方式重新排序您的连接。

这是一个小提琴,演示了这个问题:

http://sqlfiddle.com/#!17/ed147/5

原文由 Laposhasú Acsa 发布,翻译遵循 CC BY-SA 4.0 许可协议

您正在使用 [payments_action] 中的字段加入表 [scenarios_scenario]。

连接必须按顺序进行,即不能使用 ON 语句引用表中的字段,除非它们的表在语句之前。

希望有帮助

原文由 stubs 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进