2 qq 35649402 qq_35649402 于 2017.09.07 15:23 提问

关于mysql触发器根据条件查询更新的问题! 50C

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表插入数据后报错,所以请问各位大牛改如何修改才能达到目的?

3个回答

wyp19901226
wyp19901226   2017.09.07 15:27

我190C币,你来回答!****

u014042528
u014042528   2017.09.07 15:50

子查询查出来的是一组数据
你用=不合适
应该是用in
where deviceid IN ()

qq_35649402
qq_35649402 改为in后还是不行啊老哥
2 个月之前 回复
qq_35649402
qq_35649402 我是一下
2 个月之前 回复
qq_33727653
qq_33727653   2017.09.07 16:42

楼主写的触发器 与文字表述怎么不一致? 怎么没有逻辑判断直接就修改了? ;楼主说的‘’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

基本意思应该是这样,具体的楼主自己改了!

qq_35649402
qq_35649402 回复砸死接触: 这涉及到我的只是盲区了QAQ
2 个月之前 回复
qq_33727653
qq_33727653 语法是可能不对呀,俺不是说了么,‘基本意思应该是这样,具体的楼主自己改了’ (*^__^*) ……
2 个月之前 回复
qq_35649402
qq_35649402 哥哥,语法不对啊
2 个月之前 回复
qq_35649402
qq_35649402 我一会试一下
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片