gpt4 book ai didi

MySQL - 结合选择和更新?

转载 作者:行者123 更新时间:2023-11-29 08:18:37 27 4
gpt4 key购买 nike

我希望 MySQL 比较表中 2 列的值。如果两个值相同,则必须在另一个表上执行 UPDATE 语句。这是我的两张 table :

表格:员工

EMPLOYEE_ID | NAME | CREDIT
---------------------------
1 | John | 5
2 | Bill | 10
3 | Mark | 7

表格:奖金

BONUS_ID | EMPLOYEE_ID | A | B | AMOUNT
---------------------------------------
1 | 1 | x | x | 6
2 | 2 | x | y | 19
3 | 2 | y | x | 4
4 | 3 | y | y | 12
5 | 3 | x | x | 15

如果在奖金表中,A 列的值等于 B 列的值,则该行的“金额”值必须添加到员工表中的员工信用中。在 SQL 中,它会是这样的:

SELECT * FROM bonuses WHERE A = B;

..然后:

UPDATE employees SET credit = credit + bonuses.amount

-> 例如:

在“bonuses”表中,第一行值 A 与值 B 相同。这意味着 EMPLOYEE_ID 为 1 (John) 的员工必须在其信用中添加 6。对于第四行也是如此,其中值 A 等于值 B。在这种情况下,EMPLOYEE_ID 3(马克)的员工必须在其信用中添加 12。

有人知道该怎么做吗?谢谢!

最佳答案

您可以使用多表更新来连接表:

UPDATE EMPLOYEES JOIN BONUSES USING (EMPLOYEE_ID)
SET EMPLOYEES.CREDIT = EMPLOYEES.CREDIT + BONUSES.AMOUNT
WHERE BONUSES.A = BONUSES.B

但是,您可能希望考虑在 trigger 中是否可以更好地实现此逻辑。 :

CREATE TRIGGER foo AFTER INSERT ON BONUSES FOR EACH ROW
IF NEW.A = NEW.B THEN
UPDATE EMPLOYEES
SET CREDIT = CREDIT + NEW.AMOUNT
WHERE EMPLOYEE_ID = NEW.EMPLOYEE_ID
END IF
;

关于MySQL - 结合选择和更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20030377/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com