SQL文件夹实体重复数据删除过程

时间:2014-04-07 14:54:29

标签: mysql sql

我有一个数据库,其中包含用于创建文件夹/实体类型关系的表。重要的表格和栏目如下。

表:文件夹

列:id(唯一),名称,创建(日期)

表:entity_map

列:folder_id,entity_id(映射到唯一的entity_id。实体可以在多个文件夹中)。

问题是对folder.name列没有唯一的检查,所以我们有一堆名称相似的文件夹(我们不想要)。我想将具有相似名称的所有文件夹下的实体(较低(修剪(名称)))放在已存在的文件夹之下(具有最早创建日期的文件夹)。

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

UPDATE entity_map, folders join 
(
 SELECT MIN(id) id ,(LOWER(TRIM(name))) name 
  FROM folders 
  GROUP BY (LOWER(TRIM(name)))
) AS f1 ON ((f1.id <> folders.id) AND (f1.name=folders.name))
SET entity_map.folder_id=f1.id
WHERE folder_id=folders.id;

这假设folders.id为AUTO_INCREMENT,并且不考虑文件夹创建日期。如果您在上述单个事务中运行以下内容,它还将删除空文件夹:

DELETE FROM folders 
 USING folders LEFT JOIN entity_map ON (folders.id=entity_map.folder_id) 
 WHERE entity_map.folder_id IS NULL;