MySQL UDF 在 in ( subquery where ) bug


SELECT45,COUNT(0)

FROMac_dealer_salesds

WHEREds.user_idin(SELECTdu.user_idFROMac_dept_userdu

WHEREdu.is_main=1ANDfun_get_team_id(du.dept_id)=23)
这个sql 期望的返回值 是 5000.但是实际执行的返回值 是 8000.把这个sql 拆为 一个 select count(*) from tab where id in ( selectd id from tab).tab = ( create table tab as ( subquery) )sub query 中 包含了 一个UDF
fun_get_team_id( int) return int
结果与期望结果是一直的.如果 UDF 在 selectd * from tab where id in ( select * from tab where UDF() …. )这种形式的 sql 语句中. mysql 执行计划 忽略了 UDF 的存在. 导致结果不准确.将 语句改写为 一个 tab 与一个 subquery 关联 的写法. 结果是正确的.SELECTCOUNT(1)

FROMac_dealer_salesa,(SELECTdu.user_idFROMac_dept_userdu

WHEREdu.is_main=1ANDfun_get_team_id(du.dept_id)=23)b

WHEREa.user_id=b开发云主机域名.user_id
UDF 单独 在 select 部分, 还是 在 where 部分 都没有问题.跟 UDF 本身的实现逻辑没有关系. 但是在 IN ( ) 子句中 执行计划 则忽略了 UDF 的过滤条件.

相关推荐: 怎么启动和连接MySQL

小编这次要给大家分享的是怎么启动和连接MySQL,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。MySQL运行包括两部分,一部分是服务器端程序mysqld,另外一部分则是客户端程序mysql。只有mysqld启动了,mys…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/04 21:50
下一篇 06/04 21:50

相关推荐