数据库中空值引起的一个奇怪问题
2013-10-16 10:22
204 查看
在项目中遇到了很奇怪的问题,表结构是一个基本的树结构,简化如下:
需求很简单,就是查找所有叶节点,也就是没有子节点的节点,换句话说就是节点不是父节点的节点
使用sql语句就是:
想法没错,可是已测试去发现,没有找到数据,怎么可能呢?怎么可能没有叶节点呢?但确实是没有一条记录!!
分布执行子查询select parentID from [Test2],分析结果才发现,原来有一个null值,导致了问题,原来是null导致了为题。
把查询语句修改如下就正确了。
以前只注意到了判断是不是null不能使用=,只能使用 is null,想不到在使用in时如何集合里边存在null,竟然会导致整个查询条件失败,查不到任何语句。
看来对于null出现在查询条件中必须的特殊处理,否则就会引起非常奇怪的问题。
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不能使用=,只能使用 is null,想不到在使用in时如何集合里边存在null,竟然会导致整个查询条件失败,查不到任何语句。
看来对于null出现在查询条件中必须的特殊处理,否则就会引起非常奇怪的问题。
相关文章推荐
- 一个CFile::Remove引起的奇怪问题
- 一个CFile::Remove引起的奇怪问题
- Mysql打开文件引起的一个奇怪问题
- 记一个奇怪的数据库记录重复插入的问题排查过程
- SQLServer的一个奇怪问题:数据库文件不能大于4G?
- 使用Collections.emptyMap()引起的一个奇怪的问题
- 今天遇到一个奇怪的问题!!无奈搞了半天也没解决,难道非要重装
- 使用SQL Developer导入文件时出现的一个奇怪的问题
- 一个奇怪的mysql c api连接问题
- 在用zepto的on事件中遇到的一个奇怪问题.
- VC下 Runtime 版本不同原因引起的一个编译问题案例
- Entity Framework 更新数据库 datetime 类型的问题 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
- 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点
- 关于VS一个相当奇怪的问题!!!
- 奇怪问题:使用Request.QueryString传递一个中文参数,结果少了一个字!
- 一个关于android数据库操作的小问题
- 一个页面使用两次timepicker.js引起的Maximum call stack size exceeded问题解决办法及bug修复
- 使用Windows 7自带IIS(7.5)搭建FTP服务时遇到的一个奇怪问题
- 一个三年Android开发的总结 - 常见数据库问题总结
- C++中一个奇怪的问题