MySQL 创建存储过程来比较两个值

MySQL Creating Stored Procedure to compare two values

我尝试根据下面的问题创建一个存储过程,但是当我使用我的数据库中的表中的值对其进行测试时,它没有给我正确的输出。意思是如果它应该输出 1,它会输出 2。 请帮我弄清楚我做错了什么。 问题和我的 sql 陈述如下。

问题:创建一个存储过程来比较两个员工的实际收入。如果前者高于后者,则输出1;否则,输出 2.

Delimiter $$
CREATE PROCEDURE real_income(in employeeID_1 varchar(6), in employeeID_2 varchar(6),
out c int)
BEGIN
IF (SELECT income-outcome FROM salary WHERE employeeID=employeeID_1)>
(SELECT income-outcome FROM salary WHERE employeeID=employeeID_2) THEN SET c = 1;
ELSE SET c = 2;
END IF;
END $$

Sample data from salary table

您对该列的选择有误,因为 mysql 将其解释为两列的减法。 所以使用反引号,或者重命名它

CREATE TABLE salary(employeeID INT,`income-outcome` DECIMAL(10,2))
INSERT INTO salary VALUEs (1,10.2),(2,20.2)
CREATE PROCEDURE real_income(in employeeID_1 varchar(6), in employeeID_2 varchar(6),
out c int)
BEGIN
IF (SELECT `income-outcome` FROM salary WHERE employeeID=employeeID_1)>
(SELECT `income-outcome` FROM salary WHERE employeeID=employeeID_2) THEN SET c = 1;
ELSE SET c = 2;
END IF;
END
CALL real_income(1,2,@i)
SELECT @i
| @i |
| -: |
|  2 |

db<>fiddle here

这是一个更好的解决方案,因此您还可以检查相等性

CREATE PROCEDURE real_income(in employeeID_1 varchar(6), in employeeID_2 varchar(6),
out c int)
BEGIN
SET c = (CASE WHEN (SELECT `income-outcome` FROM salary WHERE employeeID=employeeID_1)>
(SELECT `income-outcome` FROM salary WHERE employeeID=employeeID_2) THEN  1
WHEN (SELECT `income-outcome` FROM salary WHERE employeeID=employeeID_1) =
(SELECT `income-outcome` FROM salary WHERE employeeID=employeeID_2) THEN  0
ELSE  2 END);

END