2010-01-21 58 views
0

我想在字段僅部分匹配的用戶表中返回重複記錄,並且匹配的字段內容是任意的。我不知道如果我解釋得很好,所以這裏是查詢我可能會遇到的一些獨特的領域,以獲得相同的成員:分組在MySQL中部分匹配的字段

SELECT MAX(id) 
FROM members 
WHERE 1 
GROUP BY some_unique_field 
HAVING COUNT(some_unique_field) > 1 

我想這同樣的想法應用到電子郵件字段,但不幸的是我們的電子郵件字段可能包含多個用逗號分隔的電子郵件。例如,我希望會員將其電子郵件設置爲「[email protected]」的成員作爲其他成員在其字段中具有「[email protected]」,「[email protected]」的副本返回。 GROUP BY顯然不會按原樣完成。

回答

0

像這樣的事情可能會爲你工作:

SELECT * 
FROM members m1 
inner join members m2 on m1.id <> m2.id 
    and (
     m1.email = m2.email 
     or m1.email like '%,' + m2.email 
     or m1.email like m2.email + ',%' 
     or m1.email like '%,' + m2.email + ',%' 
    ) 

這取決於你的電子郵件地址是如何格式一致時,有不止一個。如果逗號後總是有空格,例如,或者引號實際上是數據的一部分,則可能需要稍微修改查詢。

+0

感謝您的回答。不幸的是,我們的成員表的INNER JOIN是9400萬條記錄,查詢時間太長,這就是爲什麼我要回避這種性質的聯結。我認爲,如果我將他們的電子郵件地址分離出來,就像他們應該那樣,我可以更容易地完成我想要的東西。 – 2010-01-22 15:53:22

0

這適用於我;可能做不到你想要的:

SELECT MAX(ID) FROM members WHERE Email like "%someuser%" GROUP BY Email HAVING COUNT(Email) > 1

+0

只要您可以保證您的電子郵件字段只包含一封電子郵件,這項工作就很好。我們可能包含以逗號分隔的倍數,我試圖對部分匹配進行分組,因爲我們的模式現在存在似乎不可行。 – 2010-01-22 15:56:41