2

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

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

SQL为了过滤掉NULL连接列中有 a 的记录,我需要在下面进行什么更改?

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;
4

1 回答 1

5

如果您的 FolderId 返回 NULL,并且您打算从 Folder 表中检索所有数据,并且仅从 Folders 表中检索那些匹配的记录,那么看起来您需要更改查询以使用 folder.FolderId 而不是文件夹。 SELECT 语句中的 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是从第二个表(在本例中为 dbo.Folders)返回 NULL 值。

于 2013-02-19T19:18:40.987 回答