mysql - 如何根据另一个表中列的值为一个表编写触发器?
问题描述
我有一个表“A”,其中有一列“标志”,如下所示:
candidate_id | name | flag
-----------------------------
0001 | ABC | f |
0002 | DEF | t |
0003 | GHI | t |
和一个表“B”,其中有一列“状态”,如下所示:
candidate_id | status
-----------------------------
0001 | Applied |
0002 | Applied |
0003 | Applied |
我想用以下逻辑编写触发器:
- 当表“B”中出现条目时,我只想将“状态”值更改为“拒绝”,仅当表“B”中最后插入的“candidate_id”(指表“A”中的“candidate_id”)具有“标志=t”。
我编写了一个触发器,如下所示,但我无法在 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' 插入新行,而不是更新最后插入的行。先感谢您。
解决方案
这是我测试的解决方案:
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 |
+--------------+----------+
推荐阅读
- android - VectorDrawable 在 RadioButtons / CheckBox 中未正确显示
- php - wordpress Woocommerce中消失的商店
- c# - LINQ 可选 where 子句
- android - MaterialDatePicker 非常非常慢
- reactjs - react js警告:无法对未安装的组件执行React状态更新
- python-3.x - 从 Bigquery 上的命令行客户端执行时出现 403 权限错误
- excel - TEXT 公式中的日期格式与 Excel 中使用的语言无关
- tensorflow - 两个张量之间差异的损失函数
- ios - 如何通过 Appium 更改 Browserstack 或本地测试的 iOS 应用程序设置?
- php - 将水印戳添加到 WP 内部的图像