2012-07-28 133 views
0

我在MySQL数据库中有一些行是重复的,除了它们的ID号。如何删除MySQL中的重复行?

例如,我可能有这样的两行:

ID | wordlist | category 
845 | abashed | confused 
1800 | abashed | confused 

我想找到所有这些,只留下一个。

我可以使用SQL来做到这一点,还是我需要编写某种程序?

为了澄清,我只想在wordlist部分获得重复项。

+0

如果它们在另一个表中被引用会导致数据库不正确,因为您不知道哪个ID被引用了某个特定的重复词 – codingbiz 2012-07-28 16:49:51

+0

它们不是,导入错误。 – 2012-07-28 16:54:53

回答

1

你可以用外做到这一点凑DELETE声明:

DELETE a FROM tbl a 
LEFT JOIN 
(
    SELECT MIN(id) AS id 
    FROM tbl 
    GROUP BY wordlist 
) b ON a.id = b.id 
WHERE a.category = '<category here>' AND b.id IS NULL 

这将消除对只有一个特定的类别复制(在wordlist列),并保持一个最低的id

+0

我不想删除类别部分中的重复项。只是单词表部分。 – 2012-07-28 17:10:56

+0

@AndrewAlexander,好的,拿出'GROUP BY'中的'category'字段。试试看。 – 2012-07-28 17:11:40

+0

哦,废话,我删除了额外的信息,比我想要的。希望只删除在给定类别内重复的单词。不是你的错,这接近我所需要的,我给你提供了不正确的信息。 – 2012-07-28 17:14:39

0
ALTER IGNORE TABLE your_table ADD UNIQUE INDEX idx_wordlist (wordlist); 
+0

“关键字'index_wordlist'的重复条目'同意'” – 2012-07-28 17:05:26