IN子句在MYSQL触发器的WHERE条件下不起作用

时间:2019-04-02 12:31:23

标签: mysql database-trigger

我正在创建一个触发器,该触发器具有一个带有IN子句的MYSQL查询,如下所示。

drop trigger onPublish;
delimiter $$
create trigger onPublish AFTER insert on publish_drawing_details
for each row
begin
Declare userIds VARCHAR(255);
set userIds = (select GROUP_CONCAT(refUser) from manpower where refProject=new.refProjectId and refRoleType in (select role from hr_user));
insert into notification_container(loginUserId,mailSubject,projectId,userIds,attachmentIds,ccMails,mailText,metaNotificationEventId)
values (new.submittedBy,new.mailSubject,new.refProjectId,userIds,new.attachmentIds,new.ccEmails,new.mailText,1);
end $$

如果我这样写set userIds = (select GROUP_CONCAT(refUser) from manpower where refProject=new.refProjectId and refRoleType in (1,2,3,4,5));

,就可以正常工作

我尝试使用set userIds = (select GROUP_CONCAT(refUser) from manpower where refProject=new.refProjectId and refRoleType in (select GROUP_CONCAT(role) from hr_user));

但根本不起作用。

1 个答案:

答案 0 :(得分:0)

内部查询中不需要GROUP_CONCAT,请尝试以下操作:

SET userIds = (
    SELECT GROUP_CONCAT(refUser) 
    FROM manpower 
    WHERE refProject=new.refProjectId 
    AND refRoleType IN (
        SELECT role 
        FROM hr_user
    )
);