本来有个要求,就是查询出同一组F_process_key 下,版本F_deployment_version 最高的数据,我的sql如下:
SELECTwd.*FROMtable_wd wdWHEREwd.F_id = (SELECTF_idFROMtable_wdWHERE F_process_key = wd.F_process_key ORDER BY F_deployment_version DESC LIMIT 1)ORDER BY wd.F_id DESC;在navicat上运行也没问题,然后就放到了mapper的xml中,并加上动态sql的条件判断
结果却出乎意料日志打印:
格式化后的sql如下:
可以看到莫名其妙多了一个F_deployment_version AS sharding_gen_1,并直接导致了子查询返回两个结果,报错。
初步判断是sharding-jdbc搞的鬼。但是网上搜索了没找到有用信息
最后妥协解决方法: 子查询改成自己和自己连接查询
SELECTa.*FROMt_ticket_workflow_deployment a,(SELECTF_process_key,MAX(F_deployment_version) vFROMt_ticket_workflow_deploymentGROUP BYF_process_key) bWHEREb.F_process_key = a.F_process_keyAND b.v = a.F_deployment_versionAND a.F_deployment_status = 2GROUP BYa.F_process_keyORDER BYa.F_id DESC有知道如何解决或者问题原因的欢迎指导