为什么内部联接查询不起作用而多 where 子句起作用

Why does the Inner Join query not work while multi where clause does

比方说我运行一家不正经的汽车公司。假设我有以下 table: car_engine_mileage_counters 这是从 car_enginesmileage_counters 的联接 table 还存储了 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;

这个(显然是虚构的)例子失败了:

ERROR: invalid reference to FROM-clause entry for table "car_engine_mileage_counters" LINE 7: ON mileage_counters.id = car_engine_mileage_counters... ^ HINT: There is an entry for table "measure_instances_question_instances", but it cannot be referenced from this part of the query.

在单个 FROM 子句中枚举所有 table,并使用 WHERE AND 代替所有 INNER JOIN 但是效果很好。

我的问题是,为什么?内连接查询有什么问题?我该如何解决?重要吗?

UPDATE cem
SET mileage = mileage_counters.mileage * coefficients.coefficient
FROM car_engine_mileage_counters cem
INNER JOIN car_engines 
ON car_engines.id = cem.engine_id
INNER JOIN engine_templates
ON car_engines.template_id = engine_templates.id
INNER JOIN mileage_counters
ON mileage_counters.id = cem.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 = cem.engine_id;