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

时间:2021-06-29 15:58:14

标签: mysql stored-procedures

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

1 个答案:

答案 0 :(得分:0)

您对列的选择很糟糕,因为 mysql 将其解释为减去两列。 所以使用反引号,或者重命名

<块引用>
nasm -fbin multiboot2header.asm -o multiboot2header.bin
<块引用>
grub-file --is-x86-multiboot2 multiboot2header.bin
<块引用>
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
| @i |
| -: |
|  2 |

db<>fiddle here

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

<块引用>
CALL real_income(1,2,@i)
相关问题