当前位置:操作系统 > Unix/Linux >>

数据库中空值引起的一个奇怪问题

数据库中空值引起的一个奇怪问题
 
    在项目中遇到了很奇怪的问题,表结构是一个基本的树结构,简化如下:
[sql] 
CREATE TABLE [dbo].[Test2](  
    [nodeId] [int] IDENTITY(1,1) NOT NULL,  
    [nodeName] [nchar](10) NULL,  
    [parentID] [int] NULL  
) ON [PRIMARY]  

 

 需求很简单,就是查找所有叶节点,也就是没有子节点的节点,换句话说就是节点不是父节点的节点
使用sql语句就是:
[sql] 
SELECT [nodeId]  
      ,[nodeName]  
      ,[parentID]  
  FROM [Test2] where nodeId not in(select  parentID from [Test2] )  

 

 
想法没错,可是已测试去发现,没有找到数据,怎么可能呢?怎么可能没有叶节点呢?但确实是没有一条记录!!
分布执行子查询select  parentID from [Test2],分析结果才发现,原来有一个null值,导致了问题,原来是null导致了为题。
把查询语句修改如下就正确了。
[sql] 
SELECT [nodeId]  
      ,[nodeName]  
      ,[parentID]  
  FROM [Test2] where nodeId not in(select  parentID from [Test2] where parentID is not null)  

 

 
以前只注意到了判断是不是null不能使用=,只能使用 is null,想不到在使用in时如何集合里边存在null,竟然会导致整个查询条件失败,查不到任何语句。
看来对于null出现在查询条件中必须的特殊处理,否则就会引起非常奇怪的问题。
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,