老师,这里的报错是啥问题

老师,这里的报错是啥问题

DELETE e,s
FROM employee e
JOIN salary s ON s.employee_id = e.id
WHERE e.department_id = 2
ORDER BY (s.basic_salary + s.bonus + s.performance) DESC
LIMIT 1;

执行 sql 时候报错了,但是根据课程中老师说的,语法因该没错才对;

DELETE e,s
FROM employee e
JOIN salary s ON s.employee_id = e.id
WHERE e.department_id = 2
ORDER BY (s.basic_salary + s.bonus + s.performance) DESC
LIMIT 1
> 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 'ORDER BY (s.basic_salary + s.bonus + s.performance) DESC
LIMIT 1' at line 5
> Time: 0s
> 

正在回答

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

1回答

同学你好,Mysql中不支持在删除操作中使用排序和限制,也就是说,在delete语句中是不能使用order by和limit的。但是,此处可以使用子查询的方式来解决,即在where子句中使用select查询并排序出结果,然后再删除。同学可以自行尝试一下。

祝学习愉快~

  • Lanny_Chung 提问者 #1

    https://img1.sycdn.imooc.com/climg/6668fdce09c8e2b013460743.jpg


    老师,那这儿是课程中讲的有点问题吧

    2024-06-12 09:46:57
  • 好帮手慕小蓝 回复 提问者 Lanny_Chung #2

    同学你好,很抱歉,前面老师的回答有错误。因为在实际开发时,需要尽量避免在delete中使用order by配合limit的,因为这个语句的事务时长很长,会长时间占用锁资源,导致服务器资源被占用,进而严重影响应用程序的运行效率。这导致老师已经刻板的认为,这是不符合mysql的语法的,不应当使用,这是老师的错误。

    在同学的问题中,仅从语句和提示中可以看到,是order by子句部分有语法错误,但是老师这边没有同学使用的表和数据,无法进行测试,建议同学提供一下使用的表和数据。

    祝学习愉快~

    2024-06-12 10:43:26
  • Lanny_Chung 提问者 回复 好帮手慕小蓝 #3

    老师,表和数据放蓝奏云了
    https://wwf.lanzn.com/id9tv21os74h

    2024-06-13 09:05:54
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
Java工程师 2024版
  • 参与学习       2020    人
  • 提交作业       1249    份
  • 解答问题       1203    个

2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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