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


lets run crooked car company. let's have following table: car_engine_mileage_counters join table car_engines onto mileage_counters storing calculated field of mileage lets encode coefficient @ engine block level in factory on engine template.

update car_engine_mileage_counters set mileage = mileage_counters.mileage * coefficients.coefficient 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 coefficients.engine_template_id = engine_template.id , car_engines.id = car_engine_mileage_counters.engine_id; 

this (clearly fictitious) example fails with:

error: invalid reference from-clause entry table "car_engine_mileage_counters" line 7: on mileage_counters.id = car_engine_mileage_counters... ^ hint: there entry table "measure_instances_question_instances", cannot referenced part of query.

enumerating tables in single from clause, , using where and in place of inner joins works fine.

my question is, why? wrong inner join query? how can fix it? matter?

update cem set mileage = mileage_counters.mileage * coefficients.coefficient 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 coefficients.engine_template_id = engine_template.id , car_engines.id = cem.engine_id; 

Comments