如何使用 SQL 中的查询数据创建将行插入到不同表中的触发器?

How do I create a trigger that inserts rows into a different table using queried data in SQL?

提问人:Malark Revern 提问时间:11/3/2023 最后编辑:ShadowMalark Revern 更新时间:11/7/2023 访问量:51

问:

我想在我的 SQL 数据库中创建一个触发器,当将值插入到一个表中时,将执行查询以使用该信息从另一个表中收集信息,最后,将插入和查询中的信息合并到桥接表中。

CREATE TABLE question (question_id INT, tag VARCHAR(500) );
CREATE TABLE test (test_id INT, tag VARCHAR(500) );
CREATE TABLE question_list (test_id INT, question_id INT);

INSERT INTO test (test_id, tag) SELECT 1, "Math";

我想用新插入的填充表,然后查询表以查找具有匹配标签的多个问题,最后将两条信息组合到表中。question_listtest_idquestionquestion_list

我最初的想法是这样的:

DELIMITER #
CREATE TRIGGER generate_test ON test
FOR INSERT
BEGIN
    FOR EACH ROW ques IN (
        -- SELECT statement from question table to find matching rows
    ) BEGIN 
        INSERT INTO question_list
            (test_id, question_id)
        SELECT
            ins.test_id, question_id
        FROM INSERTED ins;

    END #
END #

我现在遇到了一个障碍,我不知道如何继续。我正在尝试的是否可能,如果是,我该如何解决我上面写的内容?

SQL MySQL 联接 触发器

评论

2赞 Shadow 11/3/2023
请提供示例数据和预期结果,因为目前尚不清楚您在这里要完成什么。
0赞 user1191247 11/3/2023
您可能需要重新访问 CREATE TRIGGER 语句。你试图做的事情是可能的,但这没有任何意义。你已经有了 s 之间的关系,那么为什么要将它插入到另一个表中呢?tag
0赞 Malark Revern 11/7/2023
@user1191247 按标签搜索时会出现数百个结果,但对于每个测试,我只想要有限数量的具有这些标签的随机问题。一旦我有了这些问题,我想跟踪返回的问题。

答:

0赞 user1191247 11/7/2023 #1

我建议这是应该在您的应用程序中处理的事情,但可以做到。

以下触发器将选择 3 个与新插入测试的标签匹配的随机 (ish) 问题:

CREATE TRIGGER test_after_insert AFTER INSERT ON test
  FOR EACH ROW
    INSERT INTO question_list (test_id, question_id)
    SELECT NEW.test_id, question_id
    FROM question
    WHERE tag = NEW.tag
    ORDER BY RAND()
    LIMIT 3;

这是一个 db<>小提琴