mycat1.6.0版本查询语句字段名等于别名问题
mycat1.6.0版本查询语句字段名等于别名问题
环境介绍
- java程序使用mybatisplus来做CRUD操作
- 程序通过mycat中间件来做分库分表的版本号1.6.0
问题现象
执行语句的时候, 发现在mysql客户端执行,能查出所有数据,程序查询结果少了一个数据库分库节点数据最后通过查看mycat日志,发现客户端执行的语句和程序执行语句不一致, 程序执行语句是列举了所有的字段,把程序中的sql语句拿出来,使用explain查看执行计划, 发现客户端执行的结果和程序一致
解决方法
升级mycat 1.6.5 或以上吧, 反正我用1.6.5版本是ok的
修改mybatis中定义的字段别名,所有字段名等于别名的sql语句,都不要指定,否则会出现分库数据查不到,只能返会一个库中的数据
举例如下
`
SELECT
id AS id,
uid,
available_sa AS availableSa,
freeze_sa AS freezeSa,
total_capital AS totalCapital,
total_income AS totalIncome,
status,
old_available_sa AS oldAvailableSa,
trans_status AS transStatus,
create_time AS createTime,
update_time AS updateTime,
general_freeze_sa AS generalFreezeSa FROM fd_user_capital WHERE
uid IN (
'SYS_GENERATE_000',
'SYS_GENERATE_002',
'SYS_GENERATE_004',
'SYS_GENERATE_005'
)
ORDER BY uid
`
就这么个语句 ,总是查出来数据少了,执行计划中显示只能查到一个分库节点。 去掉*AS id
*就能看到所有的分库节点了。
注意事项
如上图, 如果属性名字,和注解中的value名字一致, 就应该去掉,否则就会出现 id AS id
这种查询语句了。导致低版本的mycat执行出错。
这个配置也不能使用字段名和别人一致。