DBA新手,感谢您与我相处。
概述:我有组、子组和用户。
- 用户可以是组的所有者,因此应该是其所有子组的所有者
- 用户可以是小组的合作者或追随者,因此应该是小组所有子组的合作者和追随者
- 用户可以是小组的合作者或追随者
表格如下(简化):
组(主题id,标题)
子组(subtopic_id,title,topic_id)
rel_Group(user_id,topic_id,type)//确定用户与组(所有者、合作者或追随者)的关系
rel_Subgroup(用户id,子主题id,类型)//确定用户与子组(所有者、合作者或追随者)的关系
用户(User_id)
我想在创建子组时创建一个触发器,该触发器将在rel_subgroup中插入/更新/删除行,以便组中的所有者、协作者或追随者分别为子组中的所有人、协作者和追随者
这是我得到的最接近的一次,但我仍然得到:#1415-不允许从触发器返回结果集
SQL查询
delimiter //
create trigger Transfer_Rights_to_Subgroup
after insert
on Subgroup
for each row
begin
select user_id,type from rel_Group where rel_Group.topic_id = NEW.topic_id;
insert into rel_Subgroup VALUES (rel_Group.user_id,NEW.subtopic_id,rel_Group.type);
END; //
delimiter ;
我希望对插入内容进行排序,然后找出更新/删除内容。
任何帮助,非常感谢!
thx
设法解决了它:
DROP TRIGGER IF EXISTS Transfer_Rights_to_Subgroup;
DELIMITER //
CREATE TRIGGER Transfer_Rights_to_Subgroup AFTER INSERT ON subgroup
FOR EACH ROW
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE c1 INT;
DECLARE c2 INT;
DECLARE cur CURSOR FOR SELECT User_ID,Type FROM rel_group WHERE rel_group.Topic_ID = NEW.Topic_ID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
ins_loop: LOOP
FETCH cur INTO c1,c2;
IF done THEN
LEAVE ins_loop;
END IF;
INSERT INTO rel_Subgroup VALUES (c1,NEW.Subtopic_ID,c2);
END LOOP;
CLOSE cur;
END; //
DELIMITER ;
试试这个:
delimiter //
create trigger Transfer_Rights_to_Subgroup
after insert
on Subgroup
for each row
begin
select user_id,type into @userid, @type from group where rel_Group.topic_id = NEW.topic_id;
insert into rel_Subgroup VALUES (@userid,NEW.subtopic_id,@type);
END; //
delimiter ;