fix(system): 修复UserMapper分页查询重复记录问题

- 解决分页查询时因sys_company多条记录导致的数据重复问题
- 将LEFT JOIN sys_company改为按tenant_id分组的子查询
- 修改后子查询仅取每个tenant_id的第一条公司记录
- 保证分页查询返回的数据不再重复
- 同步更新了编译后的目标类文件
This commit is contained in:
2026-06-29 15:30:26 +08:00
parent 09ef6558ae
commit 0aa65d0195
2 changed files with 20 additions and 1 deletions

View File

@@ -0,0 +1,15 @@
# 2026-06-29
## fix: UserMapper.xml LEFT JOIN sys_company 导致分页查询记录重复
- 问题:`SELECT * FROM sys_user WHERE is_developer = 1` 只有5条记录`/api/system/user/page?isDeveloper=true` 返回多条重复记录
- 原因:`LEFT JOIN sys_company g ON g.tenant_id = t.tenant_id` 中,一个 tenant_id 可能在 sys_company 中有多条公司记录,产生笛卡尔积
- 修复:将 `LEFT JOIN sys_company` 改为子查询,按 `tenant_id` 分组取第一条记录
```sql
LEFT JOIN (
SELECT tenant_id, MAX(company_name) as company_name, MAX(company_logo) as company_logo
FROM sys_company
GROUP BY tenant_id
) g ON g.tenant_id = t.tenant_id
```
- 同步修改了 `target/classes/` 下的编译版本

View File

@@ -42,7 +42,11 @@
LEFT JOIN sys_user_group e ON a.group_id = e.group_id
LEFT JOIN sys_user_grade f ON a.grade_id = f.grade_id
LEFT JOIN sys_tenant t ON a.tenant_id = t.tenant_id
LEFT JOIN sys_company g ON g.tenant_id = t.tenant_id
LEFT JOIN (
SELECT tenant_id, MAX(company_name) as company_name, MAX(company_logo) as company_logo
FROM sys_company
GROUP BY tenant_id
) g ON g.tenant_id = t.tenant_id
<where>
<if test="param.userId != null">
AND a.user_id = #{param.userId}