关于将符合条件的员工调到其他不知编号的部门的问题

关于将符合条件的员工调到其他不知编号的部门的问题

#将没有部门的员工,SALES部门底薪低于2000的员工都调到OPERATIONS部门

#重点1 不知道OPERATIONS部门的部门编号 (再次链接一个表但是不写关联条件不使其合并,使其变成两个无关的表)

#重点2 OPERATIONS部门下面没有员工   (用右外连接链接另一个部门表)

update t_emp e left join t_dept d on e.deptno = d.deptno right join t_dept d1

set e.deptno 

where e.deptno is null or (d.dname = "SALES" and e.sal < 2000)

and d1.dname = "OPERATIONS"


请问老师,我使用老师教的两个方法合并起来将符合条件的员工调到不知编号的部门里,为什么会报错呢

相关截图:

https://img1.sycdn.imooc.com//climg/61515a9809b335c412550254.jpg



尝试过的解决方式:

#上面的方法报错,用update链接子查询试验

update t_emp e left join t_dept d on e.deptno = d.deptno right join 

(select deptno  from t_dept where dname = "SALES") t

set e.deptno =t.deptno

where e.deptno is null or (d.dname = "SALES" and e.sal < 2000)


请问老师,我再次使用update链接子查询的方法还是报错

相关截图:

https://img1.sycdn.imooc.com//climg/61515ab409b8523813930217.jpg




请问怎样才能正确的实现这个功能呢,我错在哪里呢




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

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

1回答
好帮手慕小尤 2021-09-27 15:35:43

同学你好,1、同学使用了两个连接,则右连接是需要连接添加的,则建议进行添加(如:on e.deptno = d1.deptno)。并想要修改e.deptno字段的值,也需要进行设置(如:set e.deptno = ##(要修改的值))。

update t_emp e left join t_dept d on e.deptno = d.deptno right join t_dept d1
on e.deptno = d1.deptno 
set e.deptno = ##(要修改的值)
where e.deptno is null or (d.dname = "SALES" and e.sal < 2000)
and d1.dname = "OPERATIONS"

2、同学使用了两个连接,则右连接是需要连接添加的,则建议进行添加(如:on e.deptno = t.deptno)

update t_emp e left join t_dept d on e.deptno = d.deptno right join 
(select deptno  from t_dept where dname = "SALES") t
on e.deptno = t.deptno 
set e.deptno =##(要修改的值)
where e.deptno is null or (d.dname = "SALES" and e.sal < 2000)

3、在sql语句中左右连接连接的是一个表,如果连接条件一样的话,则并不需要重复连接,同学可以去除右连接。参考代码如下所示:

update t_emp e left join t_dept d on e.deptno = d.deptno
set e.deptno = ##(要修改的值)
where e.deptno is null or (d.dname = "SALES" and e.sal < 2000)

祝学习愉快!

  • 提问者 应该怎么爱 #1

    请问老师我改了之后虽然不报错了但是未能得到正确结果

    1.

    update t_emp e left join t_dept d on e.deptno = d.deptno right join t_dept d1

    on e.deptno = d1.deptno

    set e.deptno = d1.deptno

    where e.deptno is null or (d.dname = "SALES" and e.sal < 2000)

    and d1.dname = "OPERATIONS"

    2.

    update t_emp e left join t_dept d on e.deptno = d.deptno right join 

    (select deptno  from t_dept where dname = "SALES") t on e.deptno = t.deptno

    set e.deptno =t.deptno

    where e.deptno is null or (d.dname = "SALES" and e.sal < 2000)


    3.

    update t_emp e left join t_dept d on e.deptno = d.deptno 

    set e.deptno =d.deptno

    where e.deptno is null or (d.dname = "SALES" and e.sal < 2000)

    https://img1.sycdn.imooc.com//climg/615185d3096948e706310136.jpg

    ​请问将没有部门的员工或SALES部门底薪低于2000的员工都调到OPERATIONS部门这道题的正确解法是什么呢

    2021-09-27 16:52:45
  • 提问者 应该怎么爱 #2

    update t_emp e left join t_dept d on e.deptno = d.deptno #right join 

    #(select deptno  from t_dept where dname = "OPERATIONS") t#查询出operations部门的部门编号 

    set e.deptno = (select deptno from t_dept where dname = "OPERATIONS")

    where e.deptno is null or (d.dname = "SALES" and e.sal < 2000)


    请问老师我在set子句里使用了子查询成功了,但是这样写是不是效率很低,还有没有更好的办法呢

    2021-09-27 17:03:55
  • 提问者 应该怎么爱 #3

    update t_emp e left join t_dept d on e.deptno = d.deptno 

    right join t_dept d1 on d1.dname = "OPERATIONS"

    set e.deptno = d1.deptno

    where e.deptno is null or(d.dname = "SALES" and e.sal < 2000)

    请问老师这样写第三张表的连接条件是自己和一个具体值相连不去和表1表2相连,这样和把子查询的结果集写在set子句里哪个好呢

    2021-09-27 17:19:12
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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