2016-09-20 123 views
1

我有一个用户表,其中包含以下列,并且我已经提出了一个基于名字和姓氏的重复记录查询。MYSQL查询根据名字和姓氏查找重复记录

表结构

CREATE TABLE IF NOT EXISTS `User` (
    `id` bigint(20) NOT NULL, 
    `address1` text COLLATE utf8_unicode_ci, 
    `mobile` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `firstName` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `lastName` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `username` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `password` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `email` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `gender` tinyint(2) NOT NULL DEFAULT '0' COMMENT '1 - female, 2-male, 0 - unknown', 
    `zip` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `countryCode` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `joinedDate` datetime DEFAULT NULL, 
    `dateOfBirth` date DEFAULT NULL COMMENT 'User date of birth' 
) ENGINE=MyISAM AUTO_INCREMENT=63561 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

和我的查询

SELECT id, firstName, lastName, mobile, email, count(*) as dupCount 
FROM `User` `t` 
WHERE firstName is not null and lastName is not null 
GROUP BY firstName,lastName HAVING count(*) > 1 
ORDER BY t.joinedDate DESC 
下面

是结果的截图当我运行查询

enter image description here

,我的数据集是在这里http://pastebin.com/Y5qsTcFc

抱歉,如果粘贴bin不起作用。试试这个https://drive.google.com/file/d/0B3gG6MG9uh7KdmRGT3d0NWg2aVk/view?usp=sharing

当有电子邮件地址为NULL的记录时,我们有问题。我总是得到这个错误。

1062 - 重复项 '雷切尔 - Besnainou' 关键 'group_key'

enter image description here

查询我跑是:

SELECT id, firstName, lastName, mobile, email, count(*) as dupCount 
FROM `User` `t` 
WHERE firstName is not null and lastName is not null 
GROUP BY firstName,lastName 
HAVING count(*) > 1 

我不知道为什么这个错误出现。任何帮助赞赏

更新1

我尝试把它添加到我的数据库,并运行查询它仍然是一样的

SET SESSION max_heap_table_size=536870912; 

SET SESSION tmp_table_size=536870912; 

裁判:Duplicate entry for key 'group_key'

更新2

我在d中试过同一个数据库iff mysql和phpmyadmin版本,它的工作。所以看起来像我的mysql版本有一个错误。我的MySQL版本是26年6月5日

+0

您设置引擎收录到期。要么删除到期或在问题中粘贴您的代码。 –

+0

@ Fred-ii-对不起,我从谷歌驱动器更新了它。请再次看到问题 – dev1234

+1

我认为这是不是一个好主意,发布名称+电子邮件的完整的SQL转储 – mirko911

回答

0

试试这个:

select a1.id, 
a1.FirstName, 
a1.LastName, 
a1.mobile, 
a1.email 
from user a1 
inner join 
(
    select FirstName, LastName, count(id) 
    from User 
    where firstname is not null 
    and lastname is not null 
    group by FirstName, LastName 
    having count(id)>1 
) u1 
    on u1.FirstName = a1.Firstname 
    and u1.Lastname = a1.lastname 
order by a1.joineddate 
+0

这是我需要的查询。从select用户名 中选择FirstName,LastName,count(id) where firstname is not null and lastname is not null group by FirstName,LastName having count(id)> 1',它给了我正确的数据集。 – dev1234

+0

当我尝试得到移动没有也是'选择名字,姓氏,移动,计数(ID)'它没有给我错误。但是当我尝试获得与邻移动没有像这样的电子邮件,'选择名字,姓氏,从用户 计数(ID) 其中姓名不为空 和姓氏不为空 组通过名字,姓氏 具有计数(ID) > 1'它仍然给我与http://i.imgur.com/KqWkfsn.png相同的错误 – dev1234