我有一个包含多个重复记录的表格如下:
ID Title
-----------------
1 Article A
2 Article A
3 Article B
4 Article C
5 Article A
在上述情况下,我需要所有重复的标题,只留下一个。
B条和C条都没有问题。 除了一个,我需要删除文章A.
示例输出:
ID Title
-----------------
1 Article A
3 Article B
4 Article C
注意:我不关心要保留或删除的ID。我想要的只是一条记录。
假设我有大量具有重复标题的记录
有什么建议吗?
答案 0 :(得分:9)
DELETE
t1
FROM
tTable t1, tTable t2
WHERE
t1.fieldName = t2.fieldName AND t1.id > t2.id
创建另一个表格,如下所示
CREATE TABLE myTable_new (ID INT PRIMARY KEY, Title varchar(20))
并将值添加为
INSERT INTO myTable_new (ID, Title) SELECT ID, DISTINCT Title FROM old_table
考虑old_table
是早期的表格......
答案 1 :(得分:6)
这将始终保留具有最低ID的行 -
DELETE t2
FROM `table` t1
INNER JOIN `table` t2
ON t1.Title = t2.Title
AND t1.ID < t2.ID
答案 2 :(得分:1)
DELETE FROM table WHERE Title = 'Article A' AND ID <> 1
只需选择要保留的ID即可。
答案 3 :(得分:0)
在UNIQUE
列上添加Title
约束,忽略重复的键错误:
ALTER IGNORE TABLE my_table ADD UNIQUE my_index (Title)
当然,这样的约束还可以防止将来将更多重复内容添加到表中;如果您不希望将来强制执行此类约束,则可以在创建约束后删除约束:
ALTER TABLE my_table DROP INDEX my_index