2017-06-21 15 views
0

重複した電子メールを持つユーザー(すべてのデータ)のリストを取得しようとしています。 私は1つのフィールドが重複しているテーブルのすべての列を選択してください

SELECT EMAIL, Count(*) 
FROM USER_TABLE 
Group By EMAIL having COUNT(*) > 1 

を使用して、すべての電子メールを取得することができ、それは電子メールのテーブルとその数(1より大きい)を返します。

私は、クエリを記述し、ちょうど

SELECT * 
FROM USER_TABLE 
WHERE EMAIL IN ('[email protected]', '[email protected]' ...);` 

を行うが、それは常に最初の最初のクエリを実行し、IN声明にそれらのすべてをコピー&ペーストするために私を必要とすることができます。

これらを組み合わせるにはどうすればよいですか?よく結合されていない、私は重複がいくつあるか気にしない、私はちょうど重複した電子メールを持つユーザーのためのすべてのユーザー情報が欲しい。

答えて

1

あなたは自分でソリューション全体を書いています。ハードコードされたリストの代わりにINとして最初のクエリが必要です。

ウィンドウ関数COUNTで
SELECT * 
FROM USER_TABLE 
WHERE EMAIL IN 
(
    SELECT EMAIL 
    FROM USER_TABLE 
    GROUP By EMAIL 
    HAVING COUNT(*) > 1 
) 
+1

ただ、二後半私は質問を編集しているため。 ( –

+1

LOL私たちはほぼ同時に同じ答えを持っていました:) –

+0

ありがとう!それはうまくいった!私はそれがそれのようなものになると思ったが、Where Where句を正しく取得できなかった。私は10分後にこれを受け入れるようにマークします – John

1

:我々はまた、あなたの最初の元のクエリにUSER_TABLEテーブルを結合し、自己を試すことができます

SELECT * 
FROM 
(
    SELECT 
     u.*, 
     COUNT(*) OVER (PARTITION BY u.Email) AS Cnt 
    FROM USER_TABLE u 
) AS t 
WHERE t.Cnt > 1 
+0

@JuanCarlosOropeza I thnik、すべての解決策は同じように見えます。趣味の問題 – Backs

0

SELECT t1.* 
FROM USER_TABLE t1 
INNER JOIN 
(
    SELECT EMAIL 
    FROM USER_TABLE 
    GROUP BY EMAIL 
    HAVING COUNT(*) > 1 
) t2 
    ON t1.EMAIL = t2.EMAIL 
関連する問題