即使我在字段上指定“is not null”,查询结果也包含空字段

时间:2013-02-19 19:13:10

标签: sql

我有两个表,我正在进行LEFT JOIN以获取第一个表中的所有记录,无论第二个表是否匹配。

我发现有时NULL会回到连接列。我输入了一个where子句来过滤掉连接列中NULL的记录,但我仍然看到这些记录。

我需要在下面的SQL中更改哪些内容才能过滤掉加入列中NULL的记录?

select
folders.FolderId,
folders.lastUpdated,
folder.FolderName,
folder.FolderParentID
from dbo.xsdl_Folder folder
left join dbo.Folders folders
on folder.FolderID = folders.FolderID
where folder.FolderID is not null;

1 个答案:

答案 0 :(得分:5)

如果您的FolderId返回NULL并且您打算从Folder表中检索所有数据并且只检索来自Folders表的那些匹配记录,那么您似乎需要更改查询以使用folder.FolderId您的SELECT语句中的folders.FolderId:

select
   folder.FolderId,
   folders.lastUpdated,
   folder.FolderName,
   folder.FolderParentID
from dbo.xsdl_Folder folder
   left join dbo.Folders folders
      on folder.FolderID = folders.FolderID

或者,如果您要从结果中删除所有NULL值,请不要使用LEFT JOIN,而是使用INNER JOIN

select
   folders.FolderId,
   folders.lastUpdated,
   folder.FolderName,
   folder.FolderParentID
from dbo.xsdl_Folder folder
   inner join dbo.Folders folders
      on folder.FolderID = folders.FolderID

LEFT JOIN的目的是从第二个表返回NULL值,在本例中为dbo.Folders。