我正在上有关Udemy的MySQL课程,但遇到了一个我无法解释的问题:
查询1(我的查询)不返回任何内容,仅在“动作输出”面板中显示“确定”。 查询2(课程提供的解决方案)确实返回了所需的值。
问题:对我来说,它们看起来完全一样-如果按照我的说法,MySQL不区分大小写。
非常感谢有人可以指出这个错误,尽管我看了太久了,但还是错过了我,这让我看起来很荒谬。
您,R
查询1:
delimiter $$
create function emp_info_rom(p_first_name varchar(255), p_last_name varchar(255)) returns decimal(10,2)
deterministic no sql reads sql data
begin
declare v_max_from_date date;
declare v_salary decimal (10,2);
select max(from_date)
into v_max_from_date
from
employees e
join salaries s on e.emp_no = s.emp_no
where e.first_name = p_first_name and e.last_name = p_last_name;
select s salary
into v_salary
from
employees e
join salaries s on e.emp_no = s.emp_no
where e.first_name = p_first_name
and e.last_name = p_last_name
and s.from_date = v_max_from_date;
Return v_salary;
end$$
delimiter ;
查询2:
DELIMITER $$
CREATE FUNCTION emp_info(p_first_name varchar(255), p_last_name varchar(255)) RETURNS decimal(10,2)
DETERMINISTIC NO SQL READS SQL DATA
BEGIN
DECLARE v_max_from_date date;
DECLARE v_salary decimal(10,2);
SELECT
MAX(from_date)
INTO v_max_from_date FROM
employees e
JOIN
salaries s ON e.emp_no = s.emp_no
WHERE
e.first_name = p_first_name
AND e.last_name = p_last_name;
SELECT
s.salary
INTO v_salary FROM
employees e
JOIN
salaries s ON e.emp_no = s.emp_no
WHERE
e.first_name = p_first_name
AND e.last_name = p_last_name
AND s.from_date = v_max_from_date;
RETURN v_salary;
END$$
DELIMITER ;
某处一定有区别,但我看不到:o /
答案 0 :(得分:0)
您有错字:
select s salary into v_salary
在第二个查询中。除非您有名为s
的列,否则应返回语法错误。
也就是说,您可以使用ORDER BY
和LIMIT
来简化此操作:
SET v_salary = (SELECT s.salary
FROM employees e JOIN
salaries s
ON e.emp_no = s.emp_no
WHERE e.first_name = p_first_name AND e.last_name = p_last_name
ORDER BY s.from_date DESC
LIMIT 1
);
我很惊讶课程的答案没有使用这样的东西。重复JOIN
和过滤不仅是多余的,而且容易出错并且性能较低。