select a.*, c.depart_name as org_code_txt from sys_user a
left join sys_user_depart b on b.user_id = a.id
left join sys_depart c on b.dep_id = c.id
left join sys_user_tenant ut on ut.user_id = a.id
where a.del_flag = 0
由于一个user可能与多个depart关联,所以同一个userid可能存在多行数据,在这里使用的是left join,而mybatis看到了left join,使用count计算total的时候用的是如下的sql
SELECT COUNT(*) FROM sys_user a WHERE a.del_flag = 0
而且是,在select语句中同一个userid,org_code_text不同也会查询出不同的数据,上述查询count的sql自然是错误的,可以加一个distinct更改sql如下
select distinct a.*, c.depart_name as org_code_txt from sys_user a
left join sys_user_depart b on b.user_id = a.id
left join sys_depart c on b.dep_id = c.id
left join sys_user_tenant ut on ut.user_id = a.id
where a.del_flag = 0
此时查询count total的sql变成了
SELECT COUNT(*) FROM
(SELECT DISTINCT a.*, c.depart_name AS org_code_txt FROM sys_user a
LEFT JOIN sys_user_depart b ON b.user_id = a.id
LEFT JOIN sys_depart c ON b.dep_id = c.id
LEFT JOIN sys_user_tenant ut
ON ut.user_id = a.id WHERE a.del_flag = 0) TOTAL
大功告成,此时records.size和total就一致了