为什么内部联接查询不起作用而多 where 子句起作用
Why does the Inner Join query not work while multi where clause does
比方说我运行一家不正经的汽车公司。假设我有以下 table:
car_engine_mileage_counters
这是从 car_engines
到 mileage_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;
比方说我运行一家不正经的汽车公司。假设我有以下 table:
car_engine_mileage_counters
这是从 car_engines
到 mileage_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;