SELECT语句,仅显示特定列中存在NULL的行

时间:2014-12-09 21:07:30

标签: sql sql-server

我遇到了一个问题,我一直在讨论这个问题而且我的代码对我有意义,但仍然无效。

以下是问题:

  

列出所有未使用(潜在)看护人的名单,以及所有无人认领艺术品的名称和类型(尚未有看守的艺术品)。

以下是表格的设置方式:

  • CareTakersCareTakerID, CareTakerName

  • DonationsDonationID, DonorID, DonatedMoney, ArtName, ArtType, ArtAppraisedPrice, ArtLocationBuilding, ArtLocationRoom, CareTakerID

  • DonorsDonorID, DonorName, DonorAddress

这是我的代码:

SELECT 
    CareTakerName, ArtName, ArtType
FROM 
    CareTakers 
JOIN 
    Donations ON CareTakers.CareTakerID = Donations.CareTakerID
WHERE 
    Donations.CareTakerID = ''

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:2)

我会建议两个查询,原因是我在上面对OP的评论中提到的原因......但是,由于您请求了一个查询,以下内容应该可以获得您所要求的内容,尽管结果集并未描述 - 通过侧。

SELECT 
    CareTakerName, ArtName, ArtType
FROM 
    CareTakers 
LEFT JOIN 
    Donations ON CareTakers.CareTakerID = Donations.CareTakerID
WHERE 
    NULLIF(Donations.CareTakerID,'') IS NULL
UNION    -- Returns a stacked result set
SELECT 
    CareTakerName, ArtName, ArtType
FROM 
    CareTakers 
RIGHT JOIN 
    Donations ON CareTakers.CareTakerID = Donations.CareTakerID
WHERE 
    NULLIF(CareTakers.CareTakerID,'') IS NULL

如果这还不够,我可以按照上面的建议提供两个单独的查询。

*编辑:包含NULLIF,其中''标准在where子句中同等地处理空白和NULL。

答案 1 :(得分:1)

Donations.CareTakerID = ''与测试NULL不同。那是测试一个空字符串。

你想要

Donations.CareTakerID is NULL

另请注意

Donations.CaretakerID = NULL 

不会给你你想要的东西(一个常见的错误。)

答案 2 :(得分:1)

使用LEFT JOIN:

SELECT CareTakerName, ArtName, ArtType
FROM CareTakers
LEFT JOIN Donations ON CareTakers.CareTakerID = Donations.CareTakerID
WHERE Donations.CareTakerID IS NULL

答案 3 :(得分:0)

首先,您需要知道什么是 NULL 值。是零,空白还是其他什么?答案是:

NULL 不是值,它只表示在创建行时未提供值。

SELECT d.ArtName, d.ArtType
,(SELECT CareTakerName FROM CareTakers c WHERE c.CareTakerID = d.CareTakerID)CareTakerName
FROM Donations d
WHERE ISNULL(d.CareTakerID, 0) = 0

*我喜欢使用"默认" NULL列的值

此处有更多信息:SQL NULL Values