这是我的代码
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表
谢谢 拉克什
答案 0 :(得分:0)
我认为您需要使用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')