如果将第一个例子写成from子查询

如果将第一个例子写成from子查询

http://img1.sycdn.imooc.com//climg/5d00f65d0001282e10140129.jpg

1
2
3
4
select e.ename
from 
t_emp e join (SELECT deptno from t_emp where ename in ('FORD','MARTIN')) p
on e.deptno = p.deptno and e.ename not in ('FORD','MARTIN')

这样写能得到正确的结果,如果我把e.deptno = p.deptno写为e.deptno in p.deptno就报错了:

http://img1.sycdn.imooc.com//climg/5d00f7180001cedc10360312.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
时间, 2019-06-13 10:30:00

同学,你好。p表中根据条件查询的deptno只有一条记录,因此要使用=号。而不能使用in。

当子查询返回的结果列包含一个值时,比较运算符才适用。假如一个子查询返回的结果集是值的列表,这时比较运算符就必须用IN运算符代替。

http://img1.sycdn.imooc.com//climg/5d01b504000123f106840133.jpg

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~~

  • p表中查询的记录不是有两个吗? 20 和30
    2019-08-11 09:28:26
  • 同学,你好。e.deptno = p.deptno是表连接条件,当e.deptno=d.deptno成立时,会保留表中数据。
    2019-08-11 15:06:01
  • p表中不是有两个记录,用e.deptno in d.deptno不能做他的表连接条件吗
    2019-08-11 15:11:09
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码