在特定条件下联接表

时间:2020-03-21 05:40:29

标签: sql oracle

这是我的代码

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表

谢谢 拉克什

1 个答案:

答案 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')
相关问题