2011-07-27 44 views
1

在我的表,我有以下栏目:我可以提取在sql中重复的提取记录吗?

id|name|gender 

我想提取所有被复制的名字,但我不想扫描所有的数据库进行逐一统计每个记录.. 。我只是想知道谁具有相同的名称... 例如:

0|mary|F 
1|tom|M 
2|peter|M 
3|mary|F 
4|chris|M 
5|chris|F 
6|alex|M 

我只是想:玛丽和克里斯... 但我不想一次阅读完所有记录... 有任何想法吗?谢谢。

回答

7
SELECT 
    name 
FROM 
    Mytable 
GROUP BY 
    name 
HAVING 
    COUNT(*) > 1 

过于分开性别,更改GROUP BY到name, gender

要删除重复的行

DELETE MyTable 
WHERE ID NOT IN 
    (
    SELECT 
     MIN(Id) 
    FROM 
     Mytable 
    GROUP BY 
     name 
    ) 
+0

+1。回答并提供了还原剂数据的解决方案 – niktrs

2

这是你在找什么?

select name from tbl 
group by name 
having count(*) > 1 
1

按我的理解,你从你的陈述意味着你做什么希望一次读取所有记录的方式是希望查询以块的形式查找重复的名称。

如果我的理解是正确的,那么你可以批量运行查询使用id作为分隔符即ie。首先运行1000条记录的查询,然后运行1000到2000之间的记录查询,然后运行2000到3000条之间的记录。

但是有一个问题,当你不想一次读取所有记录时:可能发生该名称在您已拾取的块中是唯一的,但仍可以是整个表中的副本,即名称在记录1000和2000之间可以是唯一的,但可以在记录4000和5000之间发生。