我不确定是否已经回答了这个问题,但我找不到一个好的解决方案。
我的table有个扳机( source_table
),它将填充另一个表( target_table
). 但是,在填充 target_table
,我需要从另一个表中获取一个值( intermediate_table
). 但我需要 INSERT INTO
我的 target_table
仅当 source_table
可在 intermediate_table
.
我现在的触发器是这样的。
DROP TRIGGER IF EXISTS after_source_table_insert;
DELIMITER $$
CREATE TRIGGER after_source_table_insert AFTER INSERT
ON source_table
FOR EACH ROW
BEGIN
DECLARE my_id INT(11);
SELECT some_id INTO my_id FROM intermediate_table it WHERE it.some_id = NEW.another_id;
IF my_id <> NULL THEN -- CONDITION ---
INSERT INTO `target_table` (`target_id`, `updated_at`)
VALUES (my_id, NOW())
ON DUPLICATE KEY UPDATE `updated_at` = NOW();
END IF;
END;
$$
然而 CONDITION
似乎不起作用,即使 my_id
是有效的。
执行任务的最佳方式是什么 INSERT
查询 SELECT
填充 my_id
?
正在使用 select FOUND_ROWS();
这是个不错的选择?
注意:我不想这样做 SELECT
不止一次因为table很大。
1条答案
按热度按时间ufj5ltwl1#
NULL
可以使用IS NULL
或者IS NOT NULL
.另外,我还设置了
my_id
至NULL
,以避免意外情况。通常,为声明的变量设置默认值是一种好的做法。请尝试以下操作: