簡體   English   中英

在左聯接上使用選擇大小寫?

[英]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 DISTINCTGROUP 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM