如何在 SQL 触发器内的子查询中访问插入的记录?

问题描述 投票:0回答:2

我正在创建一个数据库,其中包含测试、测试问题以及每次测试的问题的信息。我有 3 张桌子:

problem
test
question_list
problem
保存问题的信息,
test
保存测试的信息,
question_list
保存测试的密钥及其所有问题。

我正在尝试创建一个触发器,当基于新的

problems
question_list
test
插入
test_id
时,该触发器将在
problem_count
中插入多个
category
。这是我所拥有的:

DELIMITER #
CREATE TRIGGER generate_question_list
AFTER INSERT ON test
FOR EACH ROW
BEGIN
     INSERT INTO question_list (test_id, problem_id)
     SELECT NEW.test_id, p.problem_id
     FROM problem p 
     WHERE p.category REGEXP NEW.category
     ORDER BY RAND() 
     LIMIT NEW.problem_count;
END #

我的问题是它给了我一个错误并告诉我它不知道

NEW
是什么。我认为这是因为我试图在
NEW
语句中引用
SELECT
。我怎样才能解决这个问题并使其发挥作用?

sql mysql database triggers sql-insert
2个回答
0
投票

为此你需要动态sql

DELIMITER #
CREATE TRIGGER generate_question_list
AFTER INSERT ON test
FOR EACH ROW
BEGIN
    SET @d = NEW.problem_count;
    PREPARE stmt FROM'
     INSERT INTO question_list (test_id, problem_id)
     SELECT NEW.test_id, p.problem_id
     FROM problem p 
     WHERE p.category REGEXP NEW.category
     ORDER BY RAND() 
     LIMIT ? ;';
    EXECUTE stmt using @d;
    DEALLOCATE PREPARE stmt; 
END #

© www.soinside.com 2019 - 2024. All rights reserved.