sql语句中的遇到的一个问题

huangjcjava 2009-04-10 11:37:43
这是我写的一条sql语句
select max(sal) from emp
where empno not in (select mgr from emp );
结果是:
MAX(SAL)
----------

在mgr字段中存在null值
改过sql以后,
select max(sal) from emp
where empno not in (select mgr from emp where mgr is not null );
结果是:
MAX(SAL)
----------
1600
什么原因,为什么有空值就查不上来
...全文
93 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
changeking 2009-04-11
  • 打赏
  • 举报
回复
楼主可以重新考虑一下数据库建模,empno和mgr应该是两个表的东西,分别建两个表,manager也是员工,也有员工号,但是这里鼓励单独做成一个表,然后把他跟emp员工表建立1对多关系好办些
关系清楚了,可以避免null的问题
cheng_fengming 2009-04-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 huangjcjava 的帖子:]
这是我写的一条sql语句
select max(sal) from emp
where empno not in (select mgr from emp );
结果是:
MAX(SAL)
----------

在mgr字段中存在null值
改过sql以后,
select max(sal) from emp
where empno not in (select mgr from emp where mgr is not null );
结果是:
MAX(SAL)
----------
1600
什么原因,为什么有空值就查不上来
[/Quote]
在嵌套查询中下层查询是嵌套在上层查询中的,因此上层查询的where条件后的列应该和下一层查询select后的列相同啊
select max(sal) from emp
where empno not in (select empno from emp where mgr is not null );
刚好你的empno应该是不允许为空的,主键吗?
pinklotus 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mosaic 的回复:]
因为null不能和任何值进行比较(只能用is 或is not),因此not in (null)或not in (null,aaa,bbb)这样的表达式的结果始终是非.
[/Quote]
分析的相当正确
mosaic 2009-04-10
  • 打赏
  • 举报
回复
因为null不能和任何值进行比较(只能用is 或is not),因此not in (null)或not in (null,aaa,bbb)这样的表达式的结果始终是非.
fuyou001 2009-04-10
  • 打赏
  • 举报
回复
select mgr from emp where mgr is not null
这里有空值,整个值为就是false
superhsj 2009-04-10
  • 打赏
  • 举报
回复
原因不知道,但事实就是如此,有空值就是查不出来
Angly1018 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mosaic 的回复:]
因为null不能和任何值进行比较(只能用is 或is not),因此not in (null)或not in (null,aaa,bbb)这样的表达式的结果始终是非.
[/Quote]
正解
lingfenglyy 2009-04-10
  • 打赏
  • 举报
回复
not in的子查询是不能有空记录存在的,否则查询的结果就是空值。以为空和任何值比较都是空。
changeking 2009-04-10
  • 打赏
  • 举报
回复

select max(sal) from emp
where empno not in (select mgr from emp where mgr is not null );
一个表里面查?not in在两个表之间才能用的把,感觉这个关系存在两个表:employee和manager,一对多的关系

select max(sal) from emp
where empno not in (select mgr from manager );
pyxyu 2009-04-10
  • 打赏
  • 举报
回复
恭喜,恭喜
tanzuwen 2009-04-10
  • 打赏
  • 举报
回复
又多学了一点!~

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧