查询是这样写的,但执行有错。SQL> select ename,sal from emp where sal in (select max(sal),min(sal) from emp);
ERROR 位于第 1 行:
ORA-00913: 值过多我觉得这样的句子没问题,因为下面这个句子就不会出错,上面那个只是一个子句而已,而且返回的值就是5000,和800.
SQL> select ename,sal from emp where sal in (5000,800);困扰,求解
ERROR 位于第 1 行:
ORA-00913: 值过多我觉得这样的句子没问题,因为下面这个句子就不会出错,上面那个只是一个子句而已,而且返回的值就是5000,和800.
SQL> select ename,sal from emp where sal in (5000,800);困扰,求解
稍等我把oracle重启一下,试试
兄弟你where后面要跟个确定的值,西西有两个当然会这样提示你了。
select ename,sal from emp where sal in (select max(sal)from emp);
你这样写看下吧,西西,多少要给点 分的,继续关注。。
恩,一个 max(sal) 是没问题 ,这个我试了。
可是 select ename,sal from emp where sal in (5000,800); 有两个值也不会报错呀。
如果子句提供多值报错的话,万一有这种需求岂不很麻烦了
这样可以诶~ 谢谢
多问一句,为什么 max 和min 写在一个子句里会报错呢?
上面那个忘了加括号。
sal in (select 一列 from table)
哦,那就不需要用 in 了 ,用个 = 就可以了。
当时考虑的就是max 和 min 会返回两列,所以才用的in 。
此问有解,但仍然困惑。
谢谢 taoyuan0908 帮忙
谢谢 meteor5118 参与这个问题先这么着吧,说不定以后就慢慢不那么困惑了
可以改成
select ename,sal from emp a
where not exists(select 1 from emp where sal>a.sal)
or not exists(select 1 from emp where sal<a.sal);
---------- ----------
SMITH 800
KING 5000
Peter也许你这样的结果才是对的?这句的结果是:其中
SQL> select ename,sal from emp where sal =(select max(sal) from emp) or sal=(select min(sal) from emp);
ENAME SAL
---------- ----------
SMITH 800
KING 5000
可以加个条件
select ename,sal from emp a
where (not exists(select 1 from emp where sal>a.sal)
or not exists(select 1 from emp where sal <a.sal))
and sal is not null;
比较下执行计划,这么写效率可能会比写2个聚合的子查询高一点至于什么结果是对的,这是由你决定的,语句是根据需求写出来的,符合需求的就是对的