首页 > 解决方案 > MySQL 触发器 - 复制新的。插入的数据与现有的列值进行比较,如果它们匹配,则将它们插入到其他表中

问题描述

我正在尝试在我的 MySQL 数据库中的表 (Cvr_flypn_hooks_501_1000) 上创建一个触发器,该触发器执行以下操作:

问题 #1:我认为我的第一个问题是在 VALUES 部分,我试图选择要复制的现有匹配值的最后四个值选项,但是当我将其他现有数据添加到 VALUES 数组时触发器无法触发所以我认为这里有什么东西。
问题 #2:我意识到查询也将针对新数据运行,但我不希望它将自身与自身进行比较,我希望这是有道理的。

我已经在下面列出了到目前为止的内容。

IF ( EXISTS(SELECT 1 FROM Cvr_flypn_hooks_501_1000 WHERE post_author_id =  new.user_id)) then
          
          INSERT INTO Cvr_flypn_1_link_501_1000 (a_hook_id, a_user_id, a_post_id, a_post_author_id, b_hook_id, b_user_id, b_post_id, b_post_author)

          VALUES (new.hook_id, 
                  new.user_id, 
                  new.post_id, 
                  new.post_author_id,
                  (SELECT hook_id FROM Cvr_flypn_1_hooks_501_1000 WHERE post_author_id=new.user_id),
        (SELECT user_id FROM Cvr_flypn_1_hooks_501_1000 WHERE post_author_id=new.user_id),
        (SELECT post_id FROM Cvr_flypn_1_hooks_501_1000 WHERE post_author_id=new.user_id),
        (SELECT post_author_id FROM Cvr_flypn_1_hooks_501_1000 WHERE post_author_id=new.user_id));
END IF

非常感谢任何和所有帮助。我对编程很陌生,所以请慢慢来。

标签: mysqlsqltriggersphpmyadmin

解决方案


请尽量记住下次在小提琴中提供数据,如下所示,这样我们就不必一直重新创建它

Sub-SELECT 只允许返回 1 个值,因此最好添加 ORDER BY 和 A LIMIT 1。

CREATE tABLE Cvr_flypn_1_hooks_501_1000 (hook_id int, user_id int(11) ,post_id int ,post_author_id vaRCHAR(39))
INSERT INTO Cvr_flypn_1_hooks_501_1000 VALUES (1,1,1,"1")
CREATE TABLE account(hook_id int, user_id int(11) ,post_id int, post_author_id int)
CREATE TABLE Cvr_flypn_1_link_501_1000 (a_hook_id int, a_user_id int(11) ,a_post_id int, a_post_author_id int
, b_hook_id int, b_user_id int, b_post_id int, b_post_author int)
CREATE TRIGGER upd_check AFTER  INSERT ON account
       FOR EACH ROW
       BEGIN
IF ( EXISTS(SELECT 1 FROM Cvr_flypn_1_hooks_501_1000 WHERE post_author_id =  new.user_id)) then
          
          INSERT INTO Cvr_flypn_1_link_501_1000 (a_hook_id, a_user_id, a_post_id, a_post_author_id, b_hook_id, b_user_id, b_post_id, b_post_author)

          VALUES (new.hook_id, 
                  new.user_id, 
                  new.post_id, 
                  new.post_author_id,
                  (SELECT hook_id FROM Cvr_flypn_1_hooks_501_1000 WHERE post_author_id=new.user_id ORDER BY hook_id DESC),
        (SELECT user_id FROM Cvr_flypn_1_hooks_501_1000 WHERE post_author_id=new.user_id ORDER BY hook_id DESC),
        (SELECT post_id FROM Cvr_flypn_1_hooks_501_1000 WHERE post_author_id=new.user_id ORDER BY hook_id DESC),
        (SELECT post_author_id FROM Cvr_flypn_1_hooks_501_1000 WHERE post_author_id=new.user_id ORDER BY hook_id DESC));
END IF;

       END
INSERT INTO account VALUES(1,1,1,1)
SELECT * FROM Cvr_flypn_1_link_501_1000
a_hook_id | a_user_id | a_post_id | a_post_author_id | b_hook_id | b_user_id | b_post_id | b_post_author
--------: | --------: | --------: | ---------------: | --------: | --------: | --------: | ------------:
        1 | 1 | 1 | 1 | 1 | 1 | 1 | 1

db<>在这里摆弄


推荐阅读