Присоединение к таблицам при определенных условиях c - PullRequest
0 голосов
/ 21 марта 2020

Это мой код

select DISTINCT PCD.CHANGE_ID PARENT_CHANGE_ID, 
PCT.TASK_ID PARENT_TASK_ID,
ICT.TASK_ID INFRA_TASK_ID
from 
V_CHANGE_ALL_DATA PCD
JOIN V_CHANGE_TASKS PCT ON PCD.CHANGE_ID=PCT.CHANGE_ID AND PCT.STATUS NOT IN ('Closed','Completed','Cancelled','Staged') 
JOIN V_CHANGE_RELATIONS CR ON PCD.CHANGE_ID=CR.REQUEST_ID
JOIN V_CHANGE_ALL_DATA ICD ON ICD.CHANGE_ID=CR.CHANGE_ID
if PCT.NAME LIKE '%middleware' THEN 
NULL
else
JOIN V_CHANGE_TASKS ICT ON ICT.CHANGE_ID=ICD.CHANGE_ID AND ICT.STATUS NOT IN ('Closed','Staged')
END IF

Если имя в таблице PCT является промежуточным ПО, тогда я не хочу присоединяться к таблице ICT, в противном случае я хочу присоединиться к таблице ICT

Спасибо, рейк sh

1 Ответ

0 голосов
/ 21 марта 2020

Я думаю, что вам нужно использовать LEFT объединение, так как вам вообще не нужно рассматривать таблицу ICT, если PCT.NAME NOT LIKE '%middleware', и обрабатывать случай, когда PCT.NAME LIKE '%middleware', тогда вы можете использовать предложение WHERE.

Этого можно добиться с помощью следующего:

  LEFT JOIN V_CHANGE_TASKS ICT 
    ON PCT.NAME NOT LIKE '%middleware' 
   AND ICT.CHANGE_ID=ICD.CHANGE_ID 
   AND ICT.STATUS NOT IN ('Closed','Staged')
 WHERE (ICT.CHANGE_ID is not null OR PCT.NAME LIKE '%middleware')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...