如何在IN运算符SQL中使用空值

问题描述 投票:0回答:3

我对[转自代码]列有问题。共有30种不同的值。但是我需要[传输代码]的所有值分别为x1,x2和NULL。

这里是代码:

SELECT 
       ILE.[Item No_]           AS ItemNo
      ,It.[Tariff No_]          AS TariffNo
      ,ILE.[Posting Date]       AS PostingDate
      ,ILE.[Location Code]      AS LocationCode
      ,ILE.[Quantity]           AS Qty
      ,CASE 
       WHEN ILE.[Entry Type] = 0 THEN 'Purchase'    
       WHEN ILE.[Entry Type] = 4 THEN 'Transfer'
       ELSE '' END AS EntryType
      ,Trp.[Transfer-from Code] AS SourceLocation
      -- Try to cast from below all NULL values to be test, so I can use them into IN operator. Still not working
      --,ISNULL(Trp.[Transfer-from Code], 'test') AS SourceLocation

FROM [MDR].[dbo].[nav_XX$Item_Ledger_Entry]             AS ILE 
LEFT JOIN [MDR].[dbo].[nav_XX$Item]                     AS It ON ILE.[Item No_] = It.No_
LEFT JOIN [MDR].[dbo].[nav_XX$Transfer_Receipt_Header]  AS Trp on ILE.[Document No_] = Trp.No_

WHERE ILE.[Entry Type] IN ('0','4')
AND ILE.[Posting Date] > '2019-12-11 00:00:00.000'
AND ILE.[Location Code] IN ('X24','XB16')

--From this part below, everything don't work. I'm getting only the values for X1 and X2.

--AND TRP.[Transfer-from Code] IN ('X1','X2',NULL)

--AND TRP.[Transfer-from Code] IN ('X1','X2','test')

/*
AND TRP.[Transfer-from Code] = 'X1'
OR TRP.[Transfer-from Code] = 'X2'
--OR TRP.[Transfer-from Code]= NULL
OR TRP.[Transfer-from Code]= 'test'
*/

有人可以告诉我我的错误在哪里吗?

sql sql-server casting null isnull
3个回答
1
投票

您的条件应该是:

AND (TRP.[Transfer-from Code] IN ('X1','X2') OR TRP.[Transfer-from Code] IS NULL)

仅使用运算符NULLIS检查IS NOT。永远不要使用=IN,因为与NULL的比较结果始终是NULL


1
投票

"="替换"IS",添加"()",它将起作用。

尝试:

AND 
(
    TRP.[Transfer-from Code] = 'X1'
    OR TRP.[Transfer-from Code] = 'X2'
    OR TRP.[Transfer-from Code] IS NULL
)

1
投票

Null具有特殊含义,它表示未知没关系等。这就是为什么要使用特殊语法进行检查的原因:

 field IS NULL

根据您的情况

 (field IN (item1, item2, item3) OR field IS NULL)

例如

 (TRP.[Transfer-from Code] IN ('X1', 'X2') OR TRP.[Transfer-from Code] IS NULL)

请注意,即使像这样的文字

 field = NULL

 field IN (null)

语法上正确,当truefalse时,结果既不是NULL也不是field,而是NULL(是,NULL = NULL不是 true) :

如果field未知值Null)等于其他未知值Null)?它是未知Null

© www.soinside.com 2019 - 2024. All rights reserved.