开发者

What should I change in the query below?

开发者 https://www.devze.com 2023-04-12 11:39 出处:网络
SELECT ERI.ATTACK_CASE_ID, LRM.REF_VALUE AS ATTACK_CASE_STATUS, WDR.RESTRICTION_NAME, LL.USER_LABEL AS ***RESTRICTION_STATUS***,
SELECT 
      ERI.ATTACK_CASE_ID, 
      LRM.REF_VALUE AS ATTACK_CASE_STATUS,
      WDR.RESTRICTION_NAME, 
    LL.USER_LABEL AS ***RESTRICTION_STATUS***,
     WSRI.RESTRICTION_DATE,
       CASE NVL(ERI.IS_PRIMARY, 0) WHEN 0 THEN 'No' ELSE CASE ERI.IS_PRIMARY WHEN 1 THEN 'Yes' ELSE 'No' END END AS PRIMARY
FRO开发者_运维知识库M ALERT A 
 LEFT OUTER JOIN ENTITY_RESTRICTION_INFO ERI ON A.ALERT_KEY=ERI.ENTITY_KEY
 LEFT OUTER JOIN LK_REFERENCE_MAPPING LRM ON LRM.REF_KEY= TO_CHAR(ERI.ATTACK_CASE_STATUS)
 LEFT OUTER JOIN LK_REFERENCE_CATEGORY LRG ON LRM.LK_REFERENCE_CATEGORY_ID = LRG.ID 
AND  LRG.CATEGORY_CODE = 'DD' 
AND LRG.SUB_CATEGORY_CODE='ATTACK_STATUS_ID_NAME'   
 LEFT OUTER JOIN WNORKOM_DD_RESTRICTION WDR ON ERI.RESTRICTION_ID=WDR.RESTRICTION_ID 
 LEFT OUTER JOIN WNORKOM_SAR_RESTRICT_INFO WSRI ON WSRI.RESTRICTION_ID=ERI.RESTRICTION_ID
 *LEFT OUTER JOIN LK_LOOKUPS LL ON LL.CODE=**WSRI.RESTRICTION_STATUS***
WHERE A.ALERT_KEY=121234 
AND ERI.ATTACK_CASE_ID='PP-123-0980'
AND LL.TYPE=9502

The above query returns me all the records when there is some value in WSRI.RESTRICTION_STATUS

However, it returns NO RECORDS when WSRI.RESTRICTION_STATUS = NULL. What can I add/change in above query so that LL.USER_LABEL = 'Unknown' when WSRI.RESTRICTION_STATUS = NULL. For your information, there is no value 'Unknown' in LK_LOOKUPS table. This is something I want to return as an independent string when WSRI.RESTRICTION_STATUS = NULL. Adding a record to LK_LOOKUPS table with LL.CODE=NULL and LL.USER_LABEL='Unknown' can mess up things so please help me passing it independently in the query.

Thanks in advance.


It sounds you simply need to move the criteria LL.Type = 9502 into the Left Join and use Coalesce in the Select clause. Also, since you are applying criteria to a column in the Entity_Restriction_Info table from the Where clause, you have transformed the Left Join to this table into an Inner Join and thus, you might as well use an Inner Join.

Select Eri.Attack_Case_Id
    , Lrm.Ref_Value As Attack_Case_Status
    , Wdr.Restriction_Name
    , Coalesce(LL.User_Label, 'Unknown') As Restriction_Status
    , Wsri.Restriction_Date
    , Case Nvl(Eri.Is_Primary, 0) 
        When 0 Then 'No' 
        Else Case Eri.Is_Primary 
                When 1 Then 'Yes' 
                Else 'No' 
                End 
        End As Primary
From Alert As A
    Inner Join Entity_Restriction_Info As Eri 
        On A.Alert_Key=Eri.Entity_Key
    Left Outer Join Lk_Reference_Mapping As Lrm 
        On Lrm.Ref_Key= To_Char(Eri.Attack_Case_Status)
    Left Outer Join Lk_Reference_Category As Lrg 
        On Lrm.Lk_Reference_Category_Id = Lrg.Id
            And  Lrg.Category_Code = 'Dd' 
            And Lrg.Sub_Category_Code='Attack_Status_Id_Name'   
    Left Outer Join Wnorkom_Dd_Restriction As Wdr 
        On Eri.Restriction_Id=Wdr.Restriction_Id 
    Left Outer Join Wnorkom_Sar_Restrict_Info As Wsri 
        On Wsri.Restriction_Id=Eri.Restriction_Id
    Left Outer Join Lk_Lookups As LL
        On LL.Code='Wsri.Restriction_Status'
            And LL.Type=9502
Where A.Alert_Key=121234 
    And Eri.Attack_Case_Id='Pp-123-0980'


Adding a record with LL.CODE=NULL wouldn't help you, as NULL=NULL is always null (hence false). You'll need to use a select expression:

Remove the LEFT OUTER JOIN LK_LOOKUPS LL ON LL.CODE=WSRI.RESTRICTION_STATUS and the AND LL.TYPE=9502, then change the LL.USER_LABEL AS RESTRICTION_STATUS, to:

IF(WSRI.RESTRICTION_STATUS IS NULL,
  "Unknown", 
  (SELECT USER_LABEL FROM LK_LOOKUPS LL
    WHERE LL.TYPE=9502 AND LL.CODE=WSRI.RESTRICTION_STATUS)
) AS USER_LABEL


try (EDIT - as per comment):

SELECT 
      ERI.ATTACK_CASE_ID, 
      LRM.REF_VALUE AS ATTACK_CASE_STATUS,
      WDR.RESTRICTION_NAME, 
    DECODE ( WSRI.RESTRICTION_STATUS, NULL, 'Unknown', (SELECT USER_LABEL FROM LK_LOOKUPS LL WHERE LL.TYPE=9502 AND LL.CODE=WSRI.RESTRICTION_STATUS)) AS RESTRICTION_STATUS,
     WSRI.RESTRICTION_DATE,
       CASE NVL(ERI.IS_PRIMARY, 0) WHEN 0 THEN 'No' ELSE CASE ERI.IS_PRIMARY WHEN 1 THEN 'Yes' ELSE 'No' END END AS PRIMARY
FROM ALERT A 
 LEFT OUTER JOIN ENTITY_RESTRICTION_INFO ERI ON A.ALERT_KEY=ERI.ENTITY_KEY
 LEFT OUTER JOIN LK_REFERENCE_MAPPING LRM ON LRM.REF_KEY= TO_CHAR(ERI.ATTACK_CASE_STATUS)
 LEFT OUTER JOIN LK_REFERENCE_CATEGORY LRG ON LRM.LK_REFERENCE_CATEGORY_ID = LRG.ID 
AND  LRG.CATEGORY_CODE = 'DD' 
AND LRG.SUB_CATEGORY_CODE='ATTACK_STATUS_ID_NAME'   
 LEFT OUTER JOIN WNORKOM_DD_RESTRICTION WDR ON ERI.RESTRICTION_ID=WDR.RESTRICTION_ID 
 LEFT OUTER JOIN WNORKOM_SAR_RESTRICT_INFO WSRI ON WSRI.RESTRICTION_ID=ERI.RESTRICTION_ID
WHERE A.ALERT_KEY=121234 
AND ERI.ATTACK_CASE_ID='PP-123-0980'
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号