数据库版本问题导致的查询bug

embedded/2025/3/16 8:09:40/

一个比较有意思的数据库查询bug,SQL如下:

SELECT agvo1.org_id org_ids, ptd.deadline,t.*, (SELECT JSON_ARRAYAGG(JSON_OBJECT('annualGoalValueId', atv.id,'goalValue', atv.goal_value,'orderNo', atv.order_no,'attachments', atv.attachments,'orgs', (SELECT JSON_ARRAYAGG(JSON_OBJECT('orgId', org.id,'orgName', org.name))FROM orgINNER JOIN annual_goal_value_org atvo2 ON org.id = atvo2.org_idAND atvo2.org_id = agvo1.org_id -- *这里报错!WHERE atvo2.annual_goal_value_id = atv.id)))FROM annual_goal_value atvWHERE atv.target_id = t.idORDER BY order_no) AS annual_goal_values_json, pto.name office_name, ts.scope_name scope_nameFROM annual_goal_value_org agvo1LEFT JOIN annual_goal_value agv ON agvo1.annual_goal_value_id = agv.idJOIN target t ON agv.target_id = t.id AND t.deleted_at IS NULLAND t.status = 1 AND t.submit_type = 1LEFT JOIN user u ON t.created_by = u.idLEFT JOIN target_scope ts ON t.target_scope_id = ts.idLEFT JOIN pt_office pto ON t.office_id = pto.idJOIN pt_task_deadline ptd ON ptd.org_id = agvo1.org_id AND ptd.pt_task_id = (SELECT idFROM pt_taskWHERE FIND_IN_SET(agvo1.org_id, org_ids))WHERE t.year = ?
ORDER BY t.created_at DESC;

标注的地方报错,> 1054 - Unknown column 'agvo1.org_id' in 'on clause' ,我觉得难道是这里不能用外查询?就是子查询借用主查询中遍历的字段值。然后测试站没有报错,很奇怪,一样的SQL,一个报错一个不报错,唯一的变量就是MySQL的版本了,测试站是8.0.28,正式站是8.0.16,应该是版本问题。但是有个问题困扰着我,就是外查询这么通用的功能,怎么可能在这么小的版本里面进行更新修复或者开发出来,而且当我把这行注释掉,正式站又可以跑的通,可是我这个SQL又不止这个地方用到了外查询这个特性。太奇怪了。后面思考了一下,可能不是外查询的问题,我把过滤条件放在where语句就能跑的通,我很兴奋,原来是外查询放在join中是跑不通的。原本想就此结束,但是打这篇记录的时候发现,在后面的地方在join中也用到了外查询过滤,没有报错。所以问题到底是啥呢。

后续改成这个了:

SELECT agvo1.org_id org_ids, ptd.deadline, t.*, (SELECT JSON_ARRAYAGG(JSON_OBJECT('annualGoalValueId', atv.id,'goalValue', atv.goal_value,'orderNo', atv.order_no,'attachments', atv.attachments,'orgs', (SELECT JSON_ARRAYAGG(JSON_OBJECT('orgId', org.id,'orgName', org.name))FROM orgleft JOIN annual_goal_value_org atvo2 ON org.id = atvo2.org_idWHERE atvo2.annual_goal_value_id = atv.idAND atvo2.org_id = agvo1.org_id -- 放入到where过滤)))FROM annual_goal_value atv join shmec.annual_goal_value_org agvo3 ON atv.id = agvo3.annual_goal_value_idWHERE atv.target_id = t.idAND agvo3.org_id = agvo1.org_id  -- 根据业务,增加了一个过滤ORDER BY order_no) AS annual_goal_values_json -- 某高校在某任务下被分配的年度目标值, pto.name office_name, ts.scope_name scope_nameFROM annual_goal_value_org agvo1LEFT JOIN annual_goal_value agv ON agvo1.annual_goal_value_id = agv.idJOIN target t ON agv.target_id = t.id AND t.deleted_at IS NULLAND t.status = 1 AND t.submit_type = 1LEFT JOIN user u ON t.created_by = u.idLEFT JOIN target_scope ts ON t.target_scope_id = ts.idLEFT JOIN pt_office pto ON t.office_id = pto.idJOIN pt_task_deadline ptd ON ptd.org_id = agvo1.org_id AND ptd.pt_task_id = (SELECT idFROM pt_taskWHERE FIND_IN_SET(agvo1.org_id, org_ids))WHERE t.year = 2024ORDER BY t.created_at DESC;


http://www.ppmy.cn/embedded/173011.html

相关文章

LuaJIT 学习(5)—— string.buffer 库

文章目录 Using the String Buffer LibraryBuffer ObjectsBuffer Method Overview Buffer Creation and Managementlocal buf buffer.new([size [,options]]) local buf buffer.new([options])buf buf:reset()buf buf:free() Buffer Writersbuf buf:put([str|num|obj] [,……

性能优化:javascript 如何检测并处理页面卡顿

前言 在现代互联网时代,用户体验至关重要。一个流畅的网页可以让用户感到愉快,并增加他们在页面上的停留时间。然而,页面卡顿不仅会让用户感到沮丧,还可能导致他们离开你的网站。所以,如何检测并处理页面卡顿就显得尤…

C++ 学习笔记(二)

1、C支持函数重载的原理——名字修饰 【X.cpp】——>预处理:头文件展开/宏替换/去掉注释/条件编译——>【X.i】——>编译:检查语法,生成汇编代码(指令级代码)——>【X.s】——>汇编:将汇编代…

HTML块级元素和内联元素(简单易懂)

在HTML中,元素可以分为块级元素(Block-level elements)和内联元素(Inline elements)。这两类元素在页面布局和样式应用上有不同的特点和用途。 一、块级元素(Block-level elements) 1. 定义 …

VMware Tools 安装详细教程(Ubuntu 虚拟机)

VMware Tools 安装详细教程(Ubuntu 虚拟机) 本教程适用于 Ubuntu 18.04/20.04/22.04 及以上版本,分为 自动安装(open-vm-tools) 和 手动安装(官方 VMware Tools) 两种方式。 一、推荐方式&#…

蓝耘MaaS平台:阿里QWQ应用拓展与调参实践

摘要:本文深入探讨了蓝耘MaaS平台与阿里QWQ模型的结合,从平台架构、模型特点到应用拓展和调参实践进行了全面分析。蓝耘平台凭借其强大的算力支持、弹性资源调度和全栈服务,为QWQ模型的高效部署提供了理想环境。通过细化语义描述、调整推理参…

DaVinci Resolve(达芬奇)快捷键大全

DaVinci Resolve(达芬奇)剪辑模块中 鼠标操作 与 常用快捷键 的整合指南,按核心功能分类整理: 一、时间线与播放控制 功能目标鼠标操作快捷键说明播放/暂停点击时间线播放头区域空格键按 L 加速播放,J/K 反向播放跳转…

《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(32)万剑归宗破妖阵 - 最长递增子序列(LIS)

《灵珠觉醒:从零到算法金仙的C++修炼》卷三天劫试炼(32)万剑归宗破妖阵 - 最长递增子序列(LIS) 哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的万剑谷,谷中有一座巨大的万剑归宗剑阵,剑阵闪烁着神秘的光芒。谷口有一块巨大的石碑,上面刻着一行文字:…