Как написать триггер для таблицы на основе значения столбца в другой таблице? - PullRequest
0 голосов
/ 12 июля 2020

У меня есть таблица «A» со столбцом «flag», как показано ниже:

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

и таблица «B» со столбцом «статус», как показано ниже:

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

Я хочу написать триггер со следующим logi c:

  • Когда запись происходит в таблице «B», я хочу изменить значение «status» на «Rejected», только если последний вставленный «идентификатор_кандидата» в таблице «В», который ссылается на «идентификатор_кандидата» в таблице «А», имеет «флаг = t».

Я написал триггер следующим образом, но Я не могу найти синтаксис в MySql, чтобы получить значение «flag» для конкретного кандидата_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'

Не могли бы вы помочь мне здесь? Я искал много решений, но не смог найти, когда нужно проверить значение другой таблицы. Я также хотел бы знать, как вставить новую строку со статусом «Отклонено» вместо обновления последней вставленной строки. Заранее спасибо.

1 Ответ

0 голосов
/ 12 июля 2020

Вот решение, которое я тестировал:

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 |
+--------------+----------+
...