Not 不排除查询信息

问题描述

我有一个很长的查询,我发现我的 NOT 没有排除 NOT 后面括号中的内容

我看到了排除和不存在的地方,但我必须重新选择,而且我已经选择的表中有太多复杂连接的表,而且一张表非常大,需要很长时间才能选择什么我已经有了,所以我不能重新选择,因为它会使查询花费太长时间。如何让此排除生效?

INSERT INTO #UNeedingC(id,CASEID,firstname,lastname,userid,AGEOFNOTIFICATION,DATETIMEDECISIONMADE,DELEGATESYstem,Person_id,request_type_id,service_place_id,status_summary,externalUserId,subject,onDate,externalPersonId,externalSystemId) 
select distinct
 c.id,uc.case_id,t_case.FirsTNAME as first,t_case.LASTNAME as last,t_case.user_id as userid,CONVERT(VARCHAR,DATEDIFF(dd,SC.status_change_date,GETDATE())) + ' Day(s) ' + CONVERT(VARCHAR,DATEDIFF(hh,GETDATE()) % 24) + ' Hour(s) ' as [AGE OF NOTIFICATION],SC.status_change_date AS [DATE TIME DECISION MADE],[ckoltp_sys].DBO.ckfn_GetStringLocaleValue(152,9,uc.delegate_system,50,0)  AS [DELEGATESYstem],c.person_id,uc.request_type_id  ------,uc.service_place_id,uc.status_summary,eou.external_id,c.tzix_id+' '+[ckoltp_sys].dbo.ckfn_GetStringLocaleValue(148,5,0)+' type' AS subject,dateadd(  hour,41,dateadd(day,datediff(d,sc.status_change_date)) )   AS onDate,emd.externalId externalPersonId,eou.system_id as externalSystemId
 --,u.disable
from
    #tempC t_case with (NOLOCK) 
    inner join dbo.org_case c with (nolock)  ON t_case.Person_id=c.Person_id
    INNER JOIN dbo.org_2_case uc with (NOLOCK) ON uc.case_id=c.id 
    inner JOIN dbo.ORG_LOS S WITH (NOLOCK) ON S.case_id =  UC.case_id 
    inner JOIN dbo.ORG_EXTENSION SC WITH (NOLOCK) ON SC.los_id= S.id 
    inner join dbo.org_user u with (NOLOCK) on u.id=t_case.user_id
    inner join dbo.org_person op with (NOLOCK) on op.id=c.Person_id
    inner JOIN dbo.u_person_concept_value MC ON MC.CID = op.cid --this is the slow table
    inner join dbo.EXTERNAL_ORG_USER_DATA eou with (NOLOCK) ON eou.org_user_id = t_case.user_id
    inner join dbo.EXTERNAL_person_DATA emd with (NOLOCK) ON emd.CID = op.cid --op.id --?
    WHERE     
        DATEDIFF(day,GETDATE()) <= 2 
        AND
        u.disable <> 1 
        AND
            ( --(denied/approved)
            dbo.ckfn_GetStringLocaleValue(148,0) = 'Denied' 
            OR
            (dbo.ckfn_GetStringLocaleValue(148,0) in( 'Fully Approved','Partially Approved')) 
            ) 
                AND
                (
                    (
                      ISNULL(uc.request_type_id,'') in( 12)     
                      AND DATEDIFF(month,GETDATE()) <= 2    
                    )
                    OR 
                    (
                        ISNULL(uc.request_type_id,'') in( 10,11) 
                                
                    )   
                    --OR 
                    --(
                    -- --exclude this
                    --  (
                    --      MC.concept_id = '501620' --general val1 (1000/1001)
                    --      AND  
                    --      (C.ID in (select case_id from #CASES where str_value in ('1000','1001'))    
                    --      AND (uc.service_place_id = 31 OR uc.service_place_id = 32)) 
                    --  )    --not
                    --) --or
                 )--AND
             
            AND
               (t_case.firstname not like '%external%' and t_case.lastname not like '%case manager%')

            AND 
                (
                    C.ID in (select case_id from #CASES where concept_id='501620')--MC.concept_id = '501620'
                ) 
    --overall around AND (denied/approved)--
    and DBO.ckfn_GetStringLocaleValue(152,0) in ('AP','CA')
    AND NOT --this not is not working...this appears in query results
                    (
                     --exclude these
                        (
                            MC.concept_id = '501620' 
                            AND  
                            (C.ID in (select case_id from #CASES where str_value in ('1000','1001'))
                            AND (uc.service_place_id = 31 OR uc.service_place_id = 32)) 
                        )    --not
                    )   --

select * from #UNeedingC

结果显示排除的内容

    id         caseid  firstname   lastname   userid   ageofNotification  Datetimedecisionmade  DelegateSys  Person_id  request_type_id  service_place_id  status_summary  externalUserId  subject           
                    onDate            externalPersonId  externalSystemId  
    000256200  256200  Sree        Par        1234      0                 Apr 5                 CA  
4270000     11              31                3                sparee         000256200 Fully Approved tested Ad   2021-04-06 17:00  363000           2

我的问题:你知道为什么 NOT 不起作用,以及如何在没有另一个选择的情况下排除它?请参阅“这不起作用”评论。我在网上搜索但只找到 exclude 和 where 不存在,这需要另一个选择,我不想要。

解决方法

我想我明白了:“NOT 作用于一个条件。要否定两个或多个条件,请对每个条件重复 NOT,” 来自not on two things

这似乎有效:

...
AND             
                     --exclude these
                        (
                            MC.concept_id = '501620' --general val1 (1000/1001)
                            AND  
                            (C.ID not in (select case_id from #CASES where str_value in ('1000','1001'))
                            AND (uc.service_place_id not in ('31','32'))) 
                        )    --not

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...