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
我尝试根据下面的问题创建一个存储过程,但是当我使用我的数据库中的表中的值对其进行测试时,它没有给我正确的输出。意思是如果它应该输出 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