首页 > 解决方案 > 如何根据另一个表中列的值为一个表编写触发器?

问题描述

我有一个表“A”,其中有一列“标志”,如下所示:

candidate_id | name | flag 
-----------------------------
0001         |  ABC |  f  | 
0002         |  DEF |  t  | 
0003         |  GHI |  t  | 

和一个表“B”,其中有一列“状态”,如下所示:

candidate_id | status 
-----------------------------
0001         |  Applied  |
0002         |  Applied  |
0003         |  Applied  |

我想用以下逻辑编写触发器:

我编写了一个触发器,如下所示,但我无法在 MySql 中找到语法来获取特定候选 ID 的“标志”值:

CREATE TRIGGER update_status_to_rejected
Before INSERT ON db.B FOR EACH ROW  
BEGIN
    DECLARE candidate_id INTEGER;
    candidate_id = NEW.candidate_id;
    // Im stuck from here with the MySQL syntax
    get the last_inserted candidate_id,
    check in table A whether this candidate_id flag=='t'
    then:
        set NEW.status = 'Rejected'

你能在这里指导我吗?我搜索了许多解决方案,但无法找到何时需要检查另一个表的值。我还想知道如何使用 status='Rejected' 插入新行,而不是更新最后插入的行。先感谢您。

标签: mysqldatabasetriggersmysql-workbenchdatabase-trigger

解决方案


这是我测试的解决方案:

CREATE TRIGGER update_status_to_rejected
Before INSERT ON B FOR EACH ROW
BEGIN
        DECLARE _flag CHAR(1);
        SELECT flag INTO _flag FROM A WHERE candidate_id = NEW.candidate_id;
        IF _flag = 't' THEN
                SET NEW.status = 'Rejected';
        ELSE    
                SET NEW.status = 'Applied';
        END IF; 
END

测试:

mysql> insert into B set candidate_id = '0001';
mysql> insert into B set candidate_id = '0002';
mysql> insert into B set candidate_id = '0003';

结果:

mysql> select * from B;
+--------------+----------+
| candidate_id | status   |
+--------------+----------+
| 0001         | Applied  |
| 0002         | Rejected |
| 0003         | Rejected |
+--------------+----------+

推荐阅读