我有一個有趣的問題,我的邏輯不能勝任這項任務。MySQL重複 - 如何指定兩個記錄實際上不重複?
我們有一張表,有時會產生重複記錄(出於工藝原因,這是不可避免的)。看看下面的例子:
id FirstName LastName PhoneNumber email
-- --------- -------- ------------ --------------
1 John Doe 123-555-1234 [email protected]
2 Jane Smith 123-555-1111 [email protected]
3 John Doe 123-555-4321 [email protected]
4 Bob Jones 123-555-5555 [email protected]
5 John Doe 123-555-0000 [email protected]
6 Mike Roberts 123-555-9999 [email protected]
7 John Doe 123-555-1717 [email protected]
我們發現重複這樣:
SELECT c1.*
FROM `clients` c1
INNER JOIN (
SELECT `FirstName`, `LastName`, COUNT(*)
FROM `clients`
GROUP BY `FirstName`, `LastName`
HAVING COUNT(*) > 1
) AS c2
ON c1.`FirstName` = c2.`FirstName`
AND c1.`LastName` = c2.`LastName`
這會產生重複的以下列表:
id FirstName LastName PhoneNumber email
-- --------- -------- ------------ --------------
1 John Doe 123-555-1234 [email protected]
3 John Doe 123-555-4321 [email protected]
5 John Doe 123-555-0000 [email protected]
7 John Doe 123-555-1717 [email protected]
正如你所看到的,基於FirstName
和LastName
,所有記錄都是重複的。
在這一點上,我們實際上打電話給客戶端清除潛在的重複。
這樣做之後,我們學會(例如)的記錄1和3是真實的重複,而是記錄5和7實際上是兩個不同的人一起。
因此,我們將來自記錄1和3的任何外部鏈接的數據合併到記錄1中,刪除記錄3並單獨保留記錄5和7。
現在,這裏的人的問題就在:
下一次我們重新運行「重複」查詢時,它會包含以下行:
id FirstName LastName PhoneNumber email
-- --------- -------- ------------ --------------
1 John Doe 123-555-4321 [email protected]
5 John Doe 123-555-0000 [email protected]
7 John Doe 123-555-1717 [email protected]
他們都顯得重複,即使我們以前認識到他們不是。
你將如何去確定這些記錄是不是重複的?
我的第一個雖然它建立一個查找表,確定哪些記錄不是彼此重複(例如,{1,5},{1,7},{5,7}),但我有不知道如何建立一個能夠使用這些數據的查詢。
此外,如果另一條重複記錄顯示出來,它可能是1,5或7的副本,所以我們需要它們全部顯示在重複列表中,以便客戶服務人員可以撥打找出他可能重複的記錄的新記錄。
我很努力去理解這一點。那裏的任何傑出的天才都會關注這個問題?
這個解決方案完全符合我的需求。如果你沒有很好地概述,我真的不認爲我會找到解決方案。謝謝! – pbarney 2010-09-30 01:44:16