You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从数据库中按管理者名称对文件名记录去重?

针对文件名分组保留单条记录的实现方案

1. 提取管理者名称并分组查看所有相关记录

通过字符串函数提取每个文件名末尾的管理者名称,再分组统计同管理者对应的所有文件,帮你快速定位需要筛选的条目:

不同数据库的实现语句示例:

  • MySQL/MariaDB:
SELECT 
  SUBSTRING_INDEX(filename, '_', -1) AS manager_name,
  GROUP_CONCAT(filename SEPARATOR '\n') AS related_files,
  COUNT(*) AS record_count
FROM your_table
GROUP BY manager_name
HAVING COUNT(*) > 1;
  • PostgreSQL:
SELECT 
  SPLIT_PART(filename, '_', -1) AS manager_name,
  STRING_AGG(filename, '\n') AS related_files,
  COUNT(*) AS record_count
FROM your_table
GROUP BY manager_name
HAVING COUNT(*) > 1;
  • SQL Server:
SELECT 
  RIGHT(filename, CHARINDEX('_', REVERSE(filename)) - 1) AS manager_name,
  STRING_AGG(filename, CHAR(13)) AS related_files,
  COUNT(*) AS record_count
FROM your_table
GROUP BY RIGHT(filename, CHARINDEX('_', REVERSE(filename)) - 1)
HAVING COUNT(*) > 1;

执行后会得到每个管理者对应的所有文件列表,你可以直接从中挑选要保留的记录。

2. 标记要保留的记录

给表添加一个临时标记列,用来标记需要保留的条目:

-- 通用添加列语句(SQL Server可替换为BIT类型)
ALTER TABLE your_table ADD COLUMN keep_flag TINYINT(1) DEFAULT 0;

根据你手动选择的结果,逐个标记要保留的记录:

UPDATE your_table SET keep_flag = 1 WHERE filename = 'johnsmith_johnsmith';
UPDATE your_table SET keep_flag = 1 WHERE filename = 'debraclark_spy_guy';
UPDATE your_table SET keep_flag = 1 WHERE filename = 'joycerichards_joycerichards';

如果有规律可批量标记(比如客户名和管理者名相同的记录优先保留),可以用以下语句(以MySQL为例,其他数据库替换对应字符串函数即可):

UPDATE your_table 
SET keep_flag = 1 
WHERE SUBSTRING_INDEX(filename, '_', -1) = SUBSTRING_INDEX(filename, '_', 1);

标记后可通过SELECT * FROM your_table WHERE keep_flag = 0验证待删除条目是否正确。

3. 删除多余记录

确认标记无误后,删除未标记的记录:

DELETE FROM your_table WHERE keep_flag = 0;

注意:执行删除前务必备份数据,或先通过SELECT语句确认待删条目。

4. 清理临时列(可选)

完成删除后,可移除临时标记列:

ALTER TABLE your_table DROP COLUMN keep_flag;

内容的提问来源于stack exchange,提问作者Melanie Shebel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:10:30