MySQL中使用内置函数赋值的变量查询表的实现问题
问题原因
你写的SET语句不支持直接调用聚合函数从数据表中取数赋值,MAX() 这类聚合函数需要在SELECT查询上下文里执行,不能直接放在SET的赋值表达式中操作表数据。另外原代码里的SET @max_value := MAX(salary) 没有指定数据源表,数据库无法识别要从哪张表的salary字段计算最大值,自然会报错。
正确实现方式
你可以用SELECT ... INTO 语法把查询到的最高工资赋值给用户变量,写法如下:
-- 先查询最高工资赋值给变量 SELECT MAX(salary) INTO @max_value FROM salaries; -- 再用变量查询等于最高工资的员工(你原代码写的>是逻辑错误,最高工资不可能有比它大的值,要改成=) SELECT * FROM salaries WHERE salary = @max_value;
如果你的salaries表属于employees库,就调整为:
SELECT MAX(salary) INTO @max_value FROM employees.salaries; SELECT * FROM employees.salaries WHERE salary = @max_value;
补充说明
- 如果你只是单次查询最高薪员工,不需要额外定义变量,直接用子查询也可以实现:
SELECT * FROM salaries WHERE salary = (SELECT MAX(salary) FROM salaries); - 如果需要兼容其他赋值写法,也可以用
:=运算符在SELECT中完成赋值:SELECT @max_value := MAX(salary) FROM salaries; SELECT * FROM salaries WHERE salary = @max_value;
内容的提问来源于stack exchange,提问作者MNM
相关产品推荐
相关产品推荐

