MySQLの列で同じ値を持つ行を検索する


209

[メンバー]テーブルでは、一部の行の列の値が同じですemail

login_id | email
---------|---------------------
john     | john123@hotmail.com
peter    | peter456@gmail.com
johnny   | john123@hotmail.com
...

一部の人々は別のlogin_idを使用しましたが、このメールアドレスは同じであり、この列に一意の制約は設定されていません。次に、これらの行を見つけて、削除する必要があるかどうかを確認する必要があります。

これらの行を見つけるには、どのSQLステートメントを使用すればよいですか?(MySQL 5)

回答:


341

このクエリは、電子メールアドレスとそれらが使用された回数のリストを提供します。

SELECT email,
       count(*) AS c
FROM TABLE
GROUP BY email
HAVING c > 1
ORDER BY c DESC

行全体が必要な場合:

select * from table where email in (
    select email from table
    group by email having count(*) > 1
)

1
count(1)同等に機能し、パフォーマンスが向上します。(スタックオーバーフローからそのトリックを学びました;-)
jpaugh

3
@ jpaugh、count(1) stackoverflow.com
ストーム

mysqlで本質的に無限の再帰または何かが作成され、「接続が多すぎる」ためにデータベースが停止しました:-/
huygir


13

emailこれは、複数使用されるを検索するクエリlogin_idです。

SELECT email
FROM table
GROUP BY email
HAVING count(*) > 1

login_idbyのリストを取得するには、2番目の(ネストされた)クエリが必要emailです。


10

受け入れられた回答の最初の部分はMSSQLでは機能しません。
これは私のために働きました:

select email, COUNT(*) as C from table 
group by email having COUNT(*) >1 order by C desc

5

メールの列に空の値が含まれている場合に使用します

 select * from table where email in (
    select email from table group by email having count(*) > 1 and email != ''
    )

3

私はこれが非常に古い質問であることを知っていますが、これは同じ問題を抱えている可能性のある他の人のための質問です。

SELECT * FROM member WHERE email = (Select email From member Where login_id = john123@hotmail.com) 

これは、john123 @ hotmail.comをlogin_id値として持つすべてのレコードを返します。


2

みんなありがとう:-)私はこれら2つのカラムのみを気にし、残りのカラムはあまり気にしなかったので、以下を使用しました。よく働いた

  select email, login_id from table
    group by email, login_id
    having COUNT(email) > 1

2
問題のケースでは、COUNT(email)は常に1になるため、クエリは何も返しません。
ぎこちない

いいえ、クエリは実際に必要なデータを提供しました。これは、同じメールを持っている人のメールとログイン名です
Libertine

電子メール login_idでグループ化する、同じ電子メールとログインの行数がカウントされます。これらの例ではこれらは異なるため、カウントは常に1になります。0行を返すクエリのフィドルは、sqlfiddleです。 com /#!9 / 4bbcaf / 3
jutky

1

内部選択クエリで条件を使用して、必要に応じてレコード全体を取得します。

SELECT *
FROM   member
WHERE  email IN (SELECT email
                 FROM   member
                 WHERE  login_id = abcd.user@hotmail.com) 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.