diff --git a/.workbuddy/memory/2026-06-29.md b/.workbuddy/memory/2026-06-29.md new file mode 100644 index 0000000..306efea --- /dev/null +++ b/.workbuddy/memory/2026-06-29.md @@ -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/` 下的编译版本 diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml index 03c5f4a..8911f7f 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml +++ b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml @@ -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 AND a.user_id = #{param.userId}