2016-09-20 194 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