-- base_sys_user_role 角色授权去重
-- 保留每组 userId + roleId 中 id 最小的一条，删除其余重复记录

-- 1. 执行前查看重复数据
SELECT
  "userId",
  "roleId",
  COUNT(*) AS cnt,
  MIN(id) AS keep_id,
  ARRAY_AGG(id ORDER BY id) AS ids
FROM base_sys_user_role
GROUP BY "userId", "roleId"
HAVING COUNT(*) > 1
ORDER BY cnt DESC, "userId", "roleId";

-- 2. 删除重复数据
DELETE FROM base_sys_user_role a
USING base_sys_user_role b
WHERE a."userId" = b."userId"
  AND a."roleId" = b."roleId"
  AND a.id > b.id;

-- 3. 执行后复查，应返回 0 行
SELECT
  "userId",
  "roleId",
  COUNT(*) AS cnt
FROM base_sys_user_role
GROUP BY "userId", "roleId"
HAVING COUNT(*) > 1;
