【发布时间】:2015-05-08 09:14:30
【问题描述】:
假设我经营着一家畸形的汽车公司。假设我有下表:
car_engine_mileage_counters 这是从car_engines 到mileage_counters 的连接表,还存储mileage 的计算字段
还可以说,我在 engine template 的工厂中对发动机组级别的系数进行了编码。
UPDATE car_engine_mileage_counters
SET mileage = mileage_counters.mileage * coefficients.coefficient
FROM car_engines
INNER JOIN engine_templates
ON car_engines.template_id = engine_templates.id
INNER JOIN mileage_counters
ON mileage_counters.id = car_engine_mileage_counters.mileage_counter_id
INNER JOIN mileage_counter_templates
ON mileage_counter.template_id = mileage_counter_templates.id
INNER JOIN coefficients
ON coefficients.mileage_counter_template_id = mileage_counter_templates.id
WHERE coefficients.engine_template_id = engine_template.id AND car_engines.id = car_engine_mileage_counters.engine_id;
这个(显然是虚构的)示例失败了:
错误:对表的 FROM 子句条目的引用无效 “car_engine_mileage_counters” 第 7 行:开 mileage_counters.id = car_engine_mileage_counters... ^ 提示:表“measure_instances_question_instances”有一个条目,但无法引用 来自查询的这一部分。
在单个FROM 子句中枚举所有表,并使用WHERE AND 代替所有INNER JOINs 但是工作正常。
我的问题是,为什么?内部连接查询有什么问题?我该如何解决?有关系吗?
【问题讨论】:
-
您不能在第 7 行的
car_engine_mileage_counters上执行连接子句,因为它不是您的 from 子句的一部分。 -
向目标表(以及所有源表...)添加别名是最简单的解决方案。它还将增加可读性,恕我直言。
标签: sql postgresql join postgresql-9.3