null被忽略了



我试图在t-sql中运行查询,以根据列为null的列撤回数据集。

这是代码的简化版本:

SELECT
    T1.Col1, T1.Col2,
    T1.Col3, T1.Col4
FROM
    table1 AS T1
INNER JOIN 
    table2 AS T2 ON T1.Col2 = T2.Col3
WHERE 
    T2.Col4 IS NULL

问题是,结果包括t2.col4为null且不为空的行,就像该子句不存在。

任何想法都将是极大的

更新 - 代码的完整版本:

SELECT  
     M.ref                      
    ,C.cname                            
    ,CL.clname                          
    ,C.ccity                            
    ,M.productLine                      
    ,M.code                         
    ,CL.date
    ,M.dept
    ,DPT.group
    ,TK2.tkname
    ,TK2.tkdept

FROM DB.dbo.manage AS M
        OUTER JOIN DB.dbo.ClientManageRelationship AS CMR 
        ON CMR.RelatedEntityID = M.EntityID
        OUTER JOIN DB.dbo.Client AS C 
        ON C.EntityID = CMR.EntityID
        INNER  JOIN DB.dbo.ManageCustomerRelationship AS MCR 
        ON MCR.EntityID = M.EntityID
        INNER JOIN DB.dbo.Customer AS CL 
        ON CL.EntityID = MCR.RelatedID
        INNER JOIN DB.dbo.timek AS TK
        ON TK.tki = M.tkid
        LEFT JOIN  (SELECT Group = division, [Department] = newdesc, deptcode FROM DB.csrt.vw_rep_p_l_dept) AS DPT
         ON tkdept  = DPT.dept 
        LEFT JOIN (SELECT Name = TK2.tkfirst + ' ' + TK2.tklast, TK2.tki, TK2.dept, TK2.loc FROM DB.dbo.timek as TK2 WITH(NOLOCK)) AS TK2 
         ON TK2.tki = M.tkid 

    WHERE DPT.Department = 'Casualty'
    AND UPPER (C.ClientName) LIKE '%LIMITED%'
    AND CL.date > '31/12/2014'
    AND CL.Date IS NULL
    AND TK.tkloc = 'loc1' OR TK.tkloc = 'loc2'
ORDER BY M.ref

我的第一个答案是因为您使用的是内在加入。这仅在2个表之间返回匹配。尝试完整的外部连接,无论匹配项如何,它都会返回所有值,并将包括nulls。

如果您想返回所有行,无论比赛中只有一个表格包括一个表格,则使用右或向左加入。

说我有2个表("人"one_answers"数字")。并非每个人在任何一天都可能进入一个数字。但是一个例子可能是我想退还所有人,无论他们在某个一天是否进入数字。

我对此的最初方法将是左加入,因为我想返回所有人(左表),无论是在图表中有任何匹配项(右表)

    FROM Person P
    LEFT JOIN Figure F
    ON P.ID = F.ID

这将产生

之类的结果
       Name     Figure
       Sam       20
       Ben       30
       Matt      NULL
      Simon      NULL

,而

内部连接只会产生不包括nulls

的匹配值
      Name     Figure
       Sam       20
       Ben       30

左联接的工作方式与右连接相同,但朝相反的方向。这很可能是您面临的问题。但我希望这对

有所帮助

我认为问题是在其中的最后部分。您应该使用括号。

`WHERE DPT.Department = 'Casualty'
   AND UPPER (C.ClientName) LIKE '%LIMITED%'
   AND CL.date > '31/12/2014'
   AND CL.Date IS NULL
   AND (TK.tkloc = 'loc1' OR TK.tkloc = 'loc2')`

`WHERE DPT.Department = 'Casualty'
   AND UPPER (C.ClientName) LIKE '%LIMITED%'
   AND CL.date > '31/12/2014'
   AND CL.Date IS NULL
   AND TK.tkloc IN ('loc1', 'loc2')`

相关内容

  • 没有找到相关文章

最新更新