Внутреннее соединение с подзапросом в postgresql

В моем запросе мне нужно присоединиться к подзапросу в производном столбце:

select w1.wk_id,
(floor(td1.military_hour/4)*4) as military_hour_group ,
w1.end_date as end_date
from work_instances w1
inner join time_table td1 on w1.end_time = td1.time_id
inner join 
(
  select (floor(td2.military_hour/4)*4) as td2_military_hour_group, 
 (floor(td3.military_hour/4)*4) as td3_military_hour_group, wk_id
  from task_instances t1
  inner join time_table td2 on t1.end_time = td1.time_id
  inner join time_table td3 on t1.start_time = td3.time_id  
) tq1
on tq1.td2_military_hour_group = military_hour_group
and tq1.td3_military_hour_group = military_hour_group
and tq1.wk_id = w1.wf_id 

Там написано Invalid operation: column "military_hour_group" does not exist in w1, td1, unnamed_join, tq1;

Что я делаю неправильно? Пожалуйста помоги.

0
0
77
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте ниже: military_hour_group - это ваш вычисляемый столбец, и поэтому он показывает эту ошибку

select w1.wk_id,
(floor(td1.military_hour/4)*4) as military_hour_group ,
w1.end_date as end_date
from work_instances w1
inner join time_table td1 on w1.end_time = td1.time_id
inner join 
(
  select (floor(td2.military_hour/4)*4) as td2_military_hour_group, 
 (floor(td3.military_hour/4)*4) as td3_military_hour_group, wk_id
  from task_instances t1
  inner join time_table td2 on t1.end_time = td1.time_id
  inner join time_table td3 on t1.start_time = td3.time_id  
) tq1
on tq1.td2_military_hour_group = (floor(td1.military_hour/4)*4)
and tq1.td3_military_hour_group = (floor(td1.military_hour/4)*4)
and tq1.wk_id = w1.wf_id 

Хорошо Используйте, как указано ниже

select *
from (select w1.wk_id, (floor(td2.military_hour/4)*4) as military_hour_group , w1.end_date as end_date
    from work_instances w1 inner join time_table td1 on w1.end_time = td1.time_id) table1 inner join (select (floor(td2.military_hour/4)*4) as td2_military_hour_group, (floor(td3.military_hour/4)*4) as td3_military_hour_group, wk_id
    from task_instances t1 inner join time_table td2 on t1.end_time = td1.time_id inner join time_table td3 on t1.start_time = td3.time_id ) tabl2 on tabl2.td2_military_hour_group = table1.military_hour_group and tabl2.td3_military_hour_group = table1.military_hour_group and tabl2.wk_id = table1.wf_id

Отредактируйте исходный ответ вместо того, чтобы публиковать другой. И правильно отформатируйте свой код.

404 10.09.2018 12:23

Также прочтите это, чтобы узнать, как правильно форматировать код.

a_horse_with_no_name 10.09.2018 12:43

Другие вопросы по теме