2011-07-08 9 views
0

私が達成しようとしていることを説明できたらうれしいことですが、それは少し複雑です。私はこれを達成しようとしている重複を見つけてグループ化する

ID | Names 
-------------- 
A | Name1 
B | Name2 
C | Name3 

ID | md5s 
-------------- 
A | a 
A | b 
B | c 
C | a 
C | c 

私はこのような2つのテーブルを持っている最後に、私は、重複したMD5値と他の中を持っているすべての「名前」のリストを持っていると思います」これらのMD5値が見つかりました。

だから私はこのような何かを取得したい:私は説明したように、すべての「名前」のリストが必要

...

名1がName10とName8、4で「md5s」で5つの重複したエントリを持っているが上記。

うまくいけば、それは誰かにとって理にかなったことです。 :)

私はすでに、このSQL文でそれを試してみました:

SELECT names,COUNT(names) AS Num FROM tablename GROUP BY names HAVING(Num > 1); 

しかし、それは私に重複しているだけmd5sを与えます。残りの部分との関係は完全に失われています。

*編集:固定タイプミス

答えて

1

がこれよりも良い解決策になるが、ここで私はあなたのために一緒に投げてきたものだしなければならないように私は感じる:

SELECT a.names NAME, 
     b.names DUPE_NAME, 
     COUNT(*) NUM_DUPES 
FROM names_tbl a, names_tbl b, md5_tbl md5a, md5_tbl md5b 
WHERE a.id < b.id 
AND  a.id = md5a.id 
AND  b.id = md5b.id 
AND  md5a.md5 = md5b.md5 
GROUP BY a.names, b.names 
ORDER BY a.names 

経験則重複を見つけるとあなたはおそらく自己結合を行う必要があるということです。名前とそれに関連するmd5が同じレコードにある場合、これは簡単ですが、別々のテーブルに入っているので、各テーブルに2つのバージョンが必要です。

+0

こんにちはデビッド、これはうまくいくようですが、ありがとうございます。最後の「問題」は1つだけです。各「結果グループ」は2回表示されます。最後に、A - B = 11とB - A = 11があります。これをSQLで修正する可能性はありますか、それともスクリプトでこれを処理する必要がありますか? – Andy

+0

こんにちはAndy、スクリプトを修正しました。 a.id

+0

素晴らしい、今私はあなたの時間のおかげで、うれしいです。 :) – Andy

関連する問題