T-SQLでクエリを実行して、nullの列に基づいてデータセットを取り戻そうとしています。IS 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
問題があり、その結果、それは句が存在しないWHEREようなものだ、T2.Col4はNULLともNULLでない行が含まれています。あなたはINNER JOINを使用しているので
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
よろしいですか? T2.Col4を選択してサンプルデータと出力に追加できます(テキスト表形式)。 – etsa
whereを指定せずにクエリを実行すると、NULLSが返されますか? –
申し訳ありませんが、もっと明確にすべきでした。 T2Col4も選択されているので、その結果を見ることができます。私はwhere句を取り出しました。私はNULLSを返していますが、NULLSは戻っていませんが、WHERE句のない大きな結果セットを取得しています。また、私のサンプルコードよりも多くのジョインがありますが、違いがあるかどうかは分かりません。 – mark