Я не уверен, что на этот вопрос уже ответили или нет, но я не смог найти хорошего решения.
У меня есть триггер для моей таблицы (source_table
), где она заполнит другуюстол (target_table
).Однако при заполнении target_table
мне нужно получить значение из другой таблицы (intermediate_table
).Но мне нужно INSERT INTO
my target_table
, только если в intermediate_table
.
доступно значение из source_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
более одного раза, потому что таблицы очень большие.