Условие регистра в синтаксисе ЛЕВОГО СОЕДИНЕНИЯ

#mysql #join #left-join #case

#mysql #Присоединиться #левое соединение #регистр

Вопрос:

получение РЕГИСТРА внутри набора левых соединений больше не будет раздражать после ответа на этот вопрос !

однако у меня есть следующий вопрос: является ли это правильным способом применения оператора case, который выдает синтаксическую ошибку непосредственно перед оператором case (последние круглые скобки), в котором отсутствуют закрывающие круглые скобки

 from((((((`tbl_workflow_step_item`
LEFT JOIN `tbl_workflow_step_users` ON ((`tbl_workflow_step_item`.`step_id` = `tbl_workflow_step_users`.`step_id`)))
LEFT JOIN `tbl_workflow_steps` ON ((`tbl_workflow_step_item`.`step_id` = `tbl_workflow_steps`.`step_id`)))
LEFT JOIN `tbl_workflow_user_assigned` ON ((`tbl_workflow_step_users`.`user_id` = `tbl_workflow_user_assigned`.`user_id`)))
LEFT JOIN `tbl_workflow` ON ((`tbl_workflow`.`workflow_id` = `tbl_workflow_steps`.`workflow_id`)))
LEFT JOIN `tbl_report_type` ON ((`tbl_report_type`.`type_id` = `tbl_workflow_step_item`.`type`)))
case
when (`tbl_workflow`.`type` = 2) 
then 
left join `tbl_report_file` on ((`tbl_report_file`.`file_id`=`tbl_workflow_step_item`.`target_item_id`))) 
else
LEFT JOIN `tbl_blog` ON ((`tbl_blog`.`blog_id` = `tbl_workflow_step_item`.`target_item_id`)))
  

Комментарии:

1. Вы не можете этого сделать — это не имеет смысла. Подумайте об этом: возвращаемые строки будут иметь другую схему в зависимости от результата вашего case оператора.

Ответ №1:

Нет, это не хорошо. Оператор Case / when не может быть использован в части СОЕДИНЕНИЯ. Вот что вы должны сделать :

 SELECT 
 CASE
    WHEN(`tbl_workflow`.`type` = 2) 
      THEN `tbl_report_file`.YOURFIELDHERE
    ELSE
    `tbl_blog`.YOURFIELDHERE
 END AS theAliasYouWant
FROM((((((`tbl_workflow_step_item`
LEFT JOIN `tbl_workflow_step_users` ON ((`tbl_workflow_step_item`.`step_id` = `tbl_workflow_step_users`.`step_id`)))
LEFT JOIN `tbl_workflow_steps` ON ((`tbl_workflow_step_item`.`step_id` = `tbl_workflow_steps`.`step_id`)))
LEFT JOIN `tbl_workflow_user_assigned` ON ((`tbl_workflow_step_users`.`user_id` = `tbl_workflow_user_assigned`.`user_id`)))
LEFT JOIN `tbl_workflow` ON ((`tbl_workflow`.`workflow_id` = `tbl_workflow_steps`.`workflow_id`)))
LEFT JOIN `tbl_report_type` ON ((`tbl_report_type`.`type_id` = `tbl_workflow_step_item`.`type`)))
LEFT JOIN `tbl_report_file` on ((`tbl_report_file`.`file_id`=`tbl_workflow_step_item`.`target_item_id`)))
LEFT JOIN `tbl_blog` ON ((`tbl_blog`.`blog_id` = `tbl_workflow_step_item`.`target_item_id`)))