IS忽略被忽略
问题描述:
我想在T-SQL中运行一个查询来取回基于列为空的数据集。IS忽略被忽略
这是代码的简化版本:
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,也不是NULL的行,这就像WHERE子句不存在。
任何想法将大大
更新 - 代码完整版:
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
答
我的第一个答案是,因为你使用INNER JOIN。这只会返回2个表格之间的匹配。 TRY FULL OUTER JOIN将会返回所有值,无论匹配是否包含NULLS。
如果您希望返回所有行,而不考虑包括NULLS在内的其中一个表的匹配,则使用右或左连接。
说我有2个表('人'和'图')。并非每个人在任何一天都可能输入数字。但是,我可以举一个例子,不管他们是否在某一天输入数字,都要返回所有人。
我对这个最初的方法将是一个LEFT JOIN,因为我想回到所有的人(左表),无论有是图中的表中的任何比赛(右表)
FROM Person P
LEFT JOIN Figure F
ON P.ID = F.ID
这会的产生结果如
Name Figure
Sam 20
Ben 30
Matt NULL
Simon NULL
然而,
内连接将产生唯一匹配的值不包括空值
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')`
你确定吗?可以将T2.Col4添加到您的选择和发布样本数据和输出(以文本表格格式)? – etsa
当你运行没有where的查询时,你会得到NULLS吗? –
对不起,我应该更清楚。 T2Col4也被选中,所以我可以看到结果。我已经取出where子句,我得到了NULLS和NOT NULLS,但是我得到了一个没有WHERE子句的更大的结果集。此外,还有更多的连接比我的示例代码中,我不知道这是否有所作为? – mark