我正在Udemy上一门MySQL课程,遇到了一个我无法解释的问题:
查询1(我的)不返回任何东西,只是在操作输出面板中显示一个“OK”。 查询2(课程中提供的解决方案)确实返回了required值。
问题:它们在我看来完全一样--如果像我已经被告知的那样,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 ;
一定有什么不同,但我看不出来
您有一个打字错误:
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
);
我很惊讶这门课的答案没有用到这样的东西。 重复连接
和筛选不仅是多余的,而且容易出错和降低性能。