[member]テーブルでは、いくつかの行がemail
列に対して同じ値を持ちます。
login_id | email
---------|---------------------
john | [email protected]
peter | [email protected]
johnny | [email protected]
...
異なるlogin_idを使用しているが同じEメールアドレスを使用している人もいます。この列には一意の制約が設定されていません。今、私はこれらの行を見つけ、それらを削除する必要があるかどうかを確認する必要があります。
これらの行を見つけるためにどのSQLステートメントを使用すればよいですか? (MySQL 5)
このクエリはあなたに電子メールアドレスのリストとそれらが使われた回数をあなたに与えるでしょう。
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
)
select email from mytable group by email having count(*) >1
これは、複数のlogin_id
で使用されているemail
を見つけるためのクエリです。
SELECT email
FROM table
GROUP BY email
HAVING count(*) > 1
email
でlogin_id
のリストを取得するには、2番目の(ネストした)クエリが必要です。
受け入れられた回答の最初の部分は、MSSQLでは機能しません。
これは私にとって役に立ちました:
select email, COUNT(*) as C from table
group by email having COUNT(*) >1 order by C desc
email列に空の値が含まれている場合はこれを使用してください
select * from table where email in (
select email from table group by email having count(*) > 1 and email != ''
)
私はこれが非常に古い質問であることを知っています、しかしこれは同じ問題を抱えているかもしれない他の誰かのためにより多くであり、そして私はこれが望まれたものにもっと正確であると思います。
SELECT * FROM member WHERE email = (Select email From member Where login_id = [email protected])
これは、login_id値として[email protected]を持つすべてのレコードを返します。
みんなありがとう:-)私はこれらの2つのコラムだけを気にし、残りの部分についてはそれほど気にしなかったので、私は以下を使いました。うまくいった
select email, login_id from table
group by email, login_id
having COUNT(email) > 1
内部選択クエリで条件を使用して、必要に応じてレコード全体を取得します。
SELECT *
FROM member
WHERE email IN (SELECT email
FROM member
WHERE login_id = [email protected])