qq_35649402
你们让我起个名啊
采纳率42.3%
2017-09-07 07:23 阅读 1.4k

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

50

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • wyp19901226 wyp19901226 2017-09-07 07:27

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

    点赞 评论 复制链接分享
  • u014042528 卜祥鹏 2017-09-07 07:50

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

    点赞 评论 复制链接分享
  • qq_33727653 砸死接触 2017-09-07 08: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_27204949 qq_27204949 2019-05-23 10:32

    触发器中不能用update,直接用set devicename=new.xxxxx 另外,触发事件要选before

    点赞 评论 复制链接分享

相关推荐