a表
id (key)
deviceid
devicename
brand
b表
id (key)
deviceid(key)联合主键
devicename (默认值0)
brand (默认值0)
请问如何才能做到到b表中deviceid插入数据时(后),查询a.deviceid 如果a.deviceid=b.deviceid则更新b.devicename and b.brand
我的写法是
BEGIN
UPDATE b SET
devicename = new.devicename,
brand = new.brand
WHERE deviceid = (SELECT deviceid FROM a WHERE brand = new.brand and devicename = new.devicename and brand = new.brand );
end
但是这样写的话给b表插入数据后报错,所以请问各位大牛改如何修改才能达到目的?
子查询查出来的是一组数据
你用=不合适
应该是用in
where deviceid IN ()
楼主写的触发器 与文字表述怎么不一致? 怎么没有逻辑判断直接就修改了? ;楼主说的‘’deviceid插入数据时(后)‘是修改操作还是insert操作? ’ 因为insert没有OLD值的,楼主别想了 。我先按你是update deviceid的来 按after update 触发器说:
BEGIN
IF((SELECT deviceid FROM a WHERE deviceid=NEW.deviceid)==NUll)
UPDATE b SET
devicename = OLD.devicename,
brand = OLD.brand
WHERE deviceid =NEW.deviceid;
ELSE //什么都不做 就代表更新了值
end if;
end
基本意思应该是这样,具体的楼主自己改了!
触发器中不能用update,直接用set devicename=new.xxxxx 另外,触发事件要选before