4

DBA 的新手,感谢您对我的包容。

概述: 我有组、子组和用户。

  1. 用户可以是组的所有者,因此应该是其所有子组的所有者
  2. 用户可以是组的合作者或追随者,因此应该是其所有子组的合作者或追随者
  3. 用户可以是子组的合作者或追随者

表格如下(简化):

(topic_id,标题)

子组(subtopic_id、title、topic_id)

rel_Group (user_id,topic_id,type) //判断用户与组的关系(Owner,Collaborator or Follower)

rel_Subgroup (user_id,subtopic_id,type) //判断用户与子组的关系(Owner,Collaborator or Follower)

用户(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 ;

我希望对插入进行排序,然后找出更新/删除。

任何帮助,非常感谢!

谢谢

4

2 回答 2

11

设法解决它:

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 ;
于 2013-02-19T20:06:16.027 回答
0

试试这个:

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 ;
于 2013-02-19T07:49:03.430 回答