老师,这样子咋不行

老师,这样子咋不行

#删除sales部门的员工,以及没有部门的员工
DELETE t1
FROM
t_emp t1 LEFT JOIN
(SELECT deptno FROM t_dept WHERE dname="") t2
ON t1.deptno is NULL OR t1.deptno = t2.deptno;

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

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

2回答
好帮手慕小尤 2021-05-06 16:07:17

同学你好,同学是否是想要删除t_emp表中部门(deptno)为null的数据?如果是,则使用下方代码是可以实现删除的。如下所示:

DELETE t1
FROM
t_emp t1  JOIN
(SELECT deptno FROM t_dept WHERE dname="SALES")t2
ON t1.deptno is NULL OR t1.deptno = t2.deptno;

其中(SELECT deptno FROM t_dept WHERE dname="SALES")t2会获取到deptno为30的数据

http://img1.sycdn.imooc.com//climg/6093a1700953a9bb07410195.jpg

然后通过on条件删除t1.deptno(t_emp表中deptno字段)为null或t1.deptno 等于t2.deptno(t_dept表中deptno字段),也就是删除t1.deptno为null或t1.deptno 等于30的数据。如下所示:

http://img1.sycdn.imooc.com//climg/6093a154095ca6f707540372.jpg

执行sql语句,会处理7条数据,也就是删除t_emp表中deptno字段等于30与t_emp表中deptno字段等于null(空)的数据。如下所示:

http://img1.sycdn.imooc.com//climg/6093a2220931ef6705630273.jpg

http://img1.sycdn.imooc.com//climg/6093a25909907ab507410255.jpg

综上所示,是可以删除员工表中部门为null的数据的。同学无法实现删除,则建议同学重新测试一下。或同学可以反馈一下sql语句,与sql结构便于老师定位问题。

​祝学习愉快!

  • 提问者 慕楠枫桥 #1

    ​navicat中:1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE t1

    idea:Unsafe query: 'Delete' statement without 'where' clears all data in the table


    DELETE t1

    FROM

    t_emp t1  JOIN

    (SELECT deptno FROM t_dept WHERE dname="SALES")t2

    ON t1.deptno is NULL OR t1.deptno = t2.deptno;


    2021-05-06 16:49:57
  • 好帮手慕小尤 回复 提问者 慕楠枫桥 #2

    同学你好,1、在navicat测试sql是没有问题的,是可以正确删除数据的,同学出现提示,可能是关键字前出现空格等因素导致的。则建议同学查看关键字是否有变色。如下所示:如果没有,则建议同学手敲一遍试一下。

    http://img1.sycdn.imooc.com//climg/6093bb1a09ecbc0504590089.jpg

    2、idea编译器是可以操作数据库,但并不是所有的语句都可以识别,所以当使用idea时,出现了提示,为了避免清空数据库。则建议同学在navicat测试试一下。

    祝学习愉快!

    2021-05-06 18:58:26
好帮手慕小尤 2021-05-05 15:06:59

同学你好,使用左连接是以左表为主,会将主表中所有的数据删除。使用同学应该使用内连接,之删除符合条件的。如下所示:

​DELETE t1
FROM
t_emp t1 JOIN
(SELECT deptno FROM t_dept WHERE dname="SALES") t2
ON t1.deptno is NULL OR t1.deptno = t2.deptno;

注:查询dname等于"SALES"的数据(dname="SALES")

祝学习愉快!

  • 提问者 慕楠枫桥 #1

    这个好像是先执行on语句,再join表,就是emp中部门等于空的也会被删掉吧。

    2021-05-05 16:08:16
  • 好帮手慕小尤 回复 提问者 慕楠枫桥 #2

    同学你好,具体select语句执行顺序如下所示:

        from --》 join  --》 on  --》 where  --》group by(开始使用select中的别名,后面的语句中都可以使用) --》 avg,sum....  --》having  --》select  --》distinct  --》 order by 

    所以是先通过join关联表,再使用on筛选条件。同学反馈的代码中条件是:t1.deptno不为null,或t1.deptno 等于t2.deptno

    祝学习愉快!

    2021-05-05 17:36:45
  • 提问者 慕楠枫桥 回复 好帮手慕小尤 #3

    那不是通过内连接就无法删除emp表中部门为空的记录了

    2021-05-05 17:42:03
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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