日期:2014-05-16 浏览次数:20327 次
在项目中遇到了很奇怪的问题,表结构是一个基本的树结构,简化如下:
CREATE TABLE [dbo].[Test2]( [nodeId] [int] IDENTITY(1,1) NOT NULL, [nodeName] [nchar](10) NULL, [parentID] [int] NULL ) ON [PRIMARY]需求很简单,就是查找所有叶节点,也就是没有子节点的节点,换句话说就是节点不是父节点的节点
使用sql语句就是:
SELECT [nodeId] ,[nodeName] ,[parentID] FROM [Test2] where nodeId not in(select parentID from [Test2] )
分布执行子查询select parentID from [Test2],分析结果才发现,原来有一个null值,导致了问题,原来是null导致了为题。
把查询语句修改如下就正确了。
SELECT [nodeId] ,[nodeName] ,[parentID] FROM [Test2] where nodeId not in(select parentID from [Test2] where parentID is not null)
看来对于null出现在查询条件中必须的特殊处理,否则就会引起非常奇怪的问题。