Dong_Da_JR 2022-04-12 18:01 采纳率: 100%
浏览 183
已结题

mysql 通过select语句给触发器的变量赋值,但提示more than 1 row

问题遇到的现象和发生背景

如图,在触发器中定义变量hzid,并通过sql对其赋值。

img

问题相关代码,请勿粘贴截图

其中的sql表示查询指定部门(部门id:-7485506144496172193)指定年份(2022年指定月份(4月份)的主键id,其结果查询只有一条

img

运行结果及报错内容

但系统却提示more than 1 row

img

我的解答思路和尝试过的方法

经测试,在赋值sql语句最后加入limit 1就不报错了,但我不想这么做。因为这么做会取到错误的值。

我想要达到的结果

请网大家帮忙看下,是哪里的问题,我要如何解决?谢谢

  • 写回答

12条回答 默认 最新

  • 不和GPT专家争论 2022-04-13 08:13
    关注
    
    set hzid = (select id from bip_ in.oatobipzjhz where deptid = deptid and yearTime = yt and monthTime = mt);
    

    你where后面第一个条件是deptid=deptid,这不是错了吗?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 不会长胖的斜杠 后端领域新星创作者 2022-04-12 18:10
    关注

    试试any或者some关键字呢

    评论
  • 关注

    这个错误就是告诉你不止一条数据,一定不会错的,就是这个原因;
    至于你说的验证了数据只有一条应该验证条件和那个执行条件不同,你在仔细缕一下吧

    评论
  • 一起随缘 2022-04-12 18:33
    关注

    原因:首先你指定部门(部门id:-7485506144496172193)指定年份(2022年)指定月份(4月份)查询的sql没有问题,但是你的触发器语句中第23行代码如果不限制limit1的话查询出的deptId可能就有多个,这样就会查询多条部门id然后赋值时就会出现问题,所以建议在触发器中声明一个循环体,变量声明和赋值放到循环体中

    评论
  • 封尘绝念丶 2022-04-12 20:33
    关注
    评论
  • EngineZhang 2022-04-13 08:56
    关注

    img


    变量名换一下,不要和where中的字段名相同

    评论
  • 一把编程的菜刀 2022-04-13 10:12
    关注

    根据错误提示可以看出:

    set hzid = (select id from bip_ _in. oatobipzjhz where deptid = deptid and yearTime = yt and monthTime = mt); 
    
    

    你这个存在多个值

    所以 建议修改成:

    set hzid = (select id from bip_ _in. oatobipzjhz where deptid = deptid and yearTime = yt and monthTime = mt order by id desc limit 1);
    
    

    还有一点要注意的时候
    就是你设置的变量名:
    set deptid = (select ID from org_ unit where PATH = v0 and STATUS = 1 and IS DELETED = 0 limit 1)

    set hzid = (select id from bip_ _in. oatobipzjhz where deptid = deptid and yearTime = yt and monthTime = mt);

    这里面的字段名相同了,这里如果你deptid = deptid 的意思是想字段=变量,那很容易出错的,所以这里尽量使用字段名和变量名不相同的

    评论
  • 歇歇 2022-04-13 10:21
    关注

    你的部门编号deptid和变量重名了,变量名不要跟字段名相同,建议变量名前面加个v_,可以避免这种小错误

    评论
  • 老哥讲数据库 2022-04-13 13:31
    关注

    问题已经有人解答了,deptid=deptid问题。
    我就是问问你,这个触发器这么复杂的逻辑,你在执行时不使用事务吗?执行出错不回滚,数据不一致,你不是要抓狂啊?

    评论 编辑记录
  • 吕布辕门 后端领域新星创作者 2022-04-14 08:40
    关注

    后面加一个容错处理,有可能有重复数据要去掉,加limit 1

    评论
  • 仰望星空的代码 博客专家认证 2022-04-14 09:29
    关注
    评论
  • Dong_Da_JR 2022-04-14 11:07
    关注

    经测试,被采纳答案为最早回答且最准确答案,是我太粗心了,“=”左右用了一样的字段,谢谢大家

    评论
查看更多回答(11条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 赞助了问题酬金50元 4月12日
  • 创建了问题 4月12日

悬赏问题

  • ¥20 C语言字符串不区分大小写字典排序相关问题
  • ¥15 关于#python#的问题:我希望通过逆向技术爬取1688搜索页下滑加载的数据
  • ¥15 学习C++过程中遇到的问题
  • ¥15 关于Linux的终端里,模拟实现一个带口令保护的屏保程序遇到的输入输出的问题!(语言-c语言)
  • ¥15 学习C++过程中遇到的问题
  • ¥15 请问,这个嵌入式Linux系统怎么分析,crc检验区域在哪
  • ¥15 二分类改为多分类问题
  • ¥15 Unity微信小游戏上调用ReadPixels()方法报错
  • ¥15 如何通过求后验分布求得样本中属于两种物种其中一种的概率?
  • ¥15 q从常量变成sin函数,怎么改写python代码?