[英]Using select case on a left join?
我在兩個表上使用了左聯接。 現在,我想用用例來識別左表中沒有匹配項的記錄。 這些記錄存在,並且在我的聯接的“ id_zeus”列中具有空值,但是,當我執行該案例時,是因為這些字段不存在。 我要去哪里錯了? 我在所有干擾專欄中都看到“存在”。 我正在使用Oracle SQL開發人員。
SELECT
CASE DP.ID_PRB
WHEN NULL
THEN 'Absence'
ELSE 'Present' END as Disturbance,
FROM
FIRE.WSITE WI
LEFT JOIN
(SELECT DISTINCT
DPL.ID_PERT as ID_PRB
FROM FIRE.DEPPLAN DPL
GROUP BY DPL.ID_PERT
) DPL
ON WI.ID_PERT = DP.ID_PERT
什么是const
? 您似乎不需要它。 SELECT DISTINCT
和GROUP BY
是多余的,因此只能使用其中之一。 並且您在子查詢上的別名不正確。
但是您的問題是與NULL
的比較。 就像在CASE
一樣,進行比較時甚至不匹配。 您需要使用IS NULL
:
SELECT (CASE WHEN DP.ID_PRB IS NULL THEN 'Absence' ELSE 'Present'
END) as Disturbance,
FROM FIRE.WSITE WI LEFT JOIN
(SELECT DISTINCT DPL.ID_PERT as ID_PRB
FROM FIRE.OSI_DEVIATION_PLANS DP
) DP
ON WI.ID_PERT = DP.ID_PERT;
該查詢通常寫為:
SELECT (CASE WHEN NOT EXISTS (SELECT 1
FROM FIRE.OSI_DEVIATION_PLANS DP
WHERE WI.ID_PERT = DP.ID_PERT
)
THEN 'Absence' ELSE 'Present'
END) as Disturbance,
FROM FIRE.WSITE WI ;
這為優化提供了更多機會。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.