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
结果与期望结果是一直的.
测试了4个版本。5.5.95.6.325.7.268.0.19发现这样的语句只有在5.5.9上是正确的如果 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 的过滤条件.
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。