永发信息网

SQL中子查询返回的值多于一个的问题

答案:2  悬赏:20  手机版
解决时间 2021-02-09 05:30
2个表EMP和DEPT,EMP表中记录所有职员的信息,DEPT表中记录部门和经理名字,要查询工资大于本部门经理工资的员工姓名和工资,以下是2个查询语句,第一个是ok的,第二个则报警:子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。2个查询语句的区别仅仅是第二个语句没有使用表的别名而已,但问什么就不行了呢?

语句1
SELECt X.姓名, X.工资
FROM EMP AS X
WHERe X.工资 > ( SELECt 工资
FROM EMP
WHERe 职工号 IN
( SELECt 部门经理的职工号
FROM DEPT
WHERe 部门号=X.所在部门 ) )
语句2)
SELECt 姓名, 工资
FROM EMP AS A
WHERe 工资 > ( SELECt 工资
FROM EMP
WHERe 职工号 IN
( SELECt 部门经理的职工号
FROM DEPT
WHERe 部门号=所在部门 ) )

语句2)最后一行漏了表名,应该是:
SELECt 姓名, 工资
FROM EMP
WHERe 工资 > ( SELECt 工资
FROM EMP
WHERe 职工号 IN
( SELECt 部门经理的职工号
FROM DEPT
WHERe 部门号=EMP.所在部门 )
最佳答案
原因是:第一个查询里的第一个EMP使用了别名X,所以在最后一行的“WHERe 部门号=X.所在部门”,这里的X就把第一个EMP表和DEPT表相关联,所以在“
SELECt 工资
FROM EMP
WHERe 职工号 IN...”这个查询里反回的只有一行数据。
第二个查询,因为没用使用别名,所以,DEPT会和最近的EMP表相关联,其结果就是使得
“SELECt 工资
FROM EMP
WHERe 职工号 IN...”这个查询,反回多行,所以就会报错了。

如果把第二个查询改成这样
SELECt 姓名, 工资
FROM EMP
WHERe 工资 > ( SELECt TOP 1 工资
FROM EMP
WHERe 职工号 IN
( SELECt 部门经理的职工号
FROM DEPT
WHERe 部门号=EMP.所在部门 )就不会报错了,当然结果也是不正确的。
全部回答
我。。知。。道 加。。我。。私。。聊
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
LOL猴子出肉出暴击出攻速怎么样
刷手需要多少个淘宝小号,多个淘宝小号怎么实
两万字左右的小说算什么篇幅的小说?
中国移动益杰手机卖场在哪里啊,我有事要去这
邻居家故意排洪水,把我家墙弄坏,找哪个部门解
【生长激素分泌】生长激素是由什么分泌产生的
喷涂碳化钨涂层磨加工前后有什么区别?
:张飞战马超之前   人物:诸葛亮,张飞,
大市岙村怎么去啊,我要去那办事
情逆三世缘26集 欧阳震华走的时候的背景音乐
硬盘能连在主板上那个白色的对插上吗?我知道
填空题“中水”是指生活污水经处理后,达到规
陈坦头村地址好找么,我有些事要过去
根据事业单位国有资产管理法律制度的规定,下
黄纲西医内科诊所地址有知道的么?有点事想过
推荐资讯
议会是资产阶级代议制的显著特征。下列对近代
你们花呗有没有不还过 后果是什么
三星M系列是什么系列?
呷哺呷哺金博大店地址在哪,我要去那里办事
中国邮政储蓄银行ATM(新建路支行)(新建路与朝
【大气压单位】大气压的单位hPa是什么?
爬山需要带什么急救的药品?
湘约家厨餐厅(中越路店)地址在哪,我要去那里
谁会游戏王DIY做卡求助!!!!
即墨市居民生活用水每吨多少钱
天成农资怎么去啊,有知道地址的么
广州京特科技有限公司怎么样?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?