Sql 在WHERE子句中使用IsNull()
此查询:Sql 在WHERE子句中使用IsNull(),sql,sql-server,Sql,Sql Server,此查询: SELECT sc.ContactID , c.Price , p.ParkID FROM tblc c JOIN tblsc ON c.ID= sc.ID LEFT JOIN tblp p ON sc.ID= p.ID WHERE (stuff = stuff) AND (stuff = stuff) 返回以下内容: ContactID LeadSalePr
SELECT
sc.ContactID
, c.Price
, p.ParkID
FROM
tblc c
JOIN tblsc ON c.ID= sc.ID
LEFT JOIN tblp p ON sc.ID= p.ID
WHERE
(stuff = stuff)
AND (stuff = stuff)
返回以下内容:
ContactID LeadSalePrice ParkID
-------------------------------------
1 50 NULL
2 60 22
现在,我正在尝试为ParkID
设置另一个和子句。但是,我只想在ParkID
不为空的行上执行此和
。因此,如果在ParkID
为空的行上,我们希望始终保留这些行。对于ParkID不为NULL的行,我们只希望在ParkID
与参数匹配时保留这些行
如果@ParkID=22,则返回两行
如果@ParkID 22,则只返回最上面一行
如果@ParkID=NULL,则返回两行
我试过这个:
SELECT
sc.ContactID
, c.Price
, p.ParkID
FROM
tblc c
JOIN tblsc ON c.ID= sc.ID
LEFT JOIN tblp p ON sc.ID= p.ID
WHERE
(stuff = stuff)
AND (stuff = stuff)
AND p.ParkID =
CASE WHEN p.ParkID IS NULL THEN
NULL
ELSE
@ParkID
END
这不起作用,因为与null比较的正确方法不是:
= NULL
它是
出于同样的原因(我假设),这也不起作用:
AND p.ParkID = Isnull(p.ParkID, @ParkID)
如何执行此操作?只需检查p.ParkID
是否为NULL
或是否匹配@ParkID
:
WHERE p.ParkID IS NULL
OR p.ParkID = @ParkID
更紧凑:
WHERE p.ParkID IN ('', NULL)
谢谢我来测试一下
WHERE p.ParkID IN ('', NULL)