fix(system): 修复UserMapper分页查询重复记录问题
- 解决分页查询时因sys_company多条记录导致的数据重复问题 - 将LEFT JOIN sys_company改为按tenant_id分组的子查询 - 修改后子查询仅取每个tenant_id的第一条公司记录 - 保证分页查询返回的数据不再重复 - 同步更新了编译后的目标类文件
This commit is contained in:
15
.workbuddy/memory/2026-06-29.md
Normal file
15
.workbuddy/memory/2026-06-29.md
Normal 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/` 下的编译版本
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user