为什么会报错1242 Subquery returns more than 1 row?

图片说明图片说明

我用下面这串代码来实现约束条件,但在系部信息表插入数据的时候,前两条数据都能判断成功,但插入第三条数据就报错1242,找不到问题,求解决

DELIMITER //
create trigger trigger_id before insert
on xibuxinxi for each row
begin
declare a1 int;
set a1=(select left(new.编号,2) from xibuxinxi);
if a1 != all(select 编号 from xueyuanxinxi)
then signal sqlstate 'ERROR'
set message_text='不是有效的编号';
end if;
end//

set a1=(select left(new.编号,2) from xibuxinxi);
这里只能返回一条记录,返回多条的时候会报这个错误。

看意图截取前2个字符,可以改成

set a1=left(new.编号,2);