MySQL의 열에서 동일한 값을 가진 행 찾기


209

[member] 테이블에서 일부 행의 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


"너무 많은 연결"로 인해 데이터베이스에
불완전한


13

다음은 email하나 이상에 사용되는를 찾는 쿼리입니다 login_id.

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

login_idby의 목록을 얻으려면 두 번째 (중첩 된) 쿼리가 필요 합니다 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

고마워 사람들 :-) 나는 그 두 열에 대해서만 관심이 있었고 나머지는별로 신경 쓰지 않았기 때문에 아래를 사용했습니다. 잘 했어

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

2
문제의 경우 COUNT (이메일)은 항상 1이므로 쿼리는 아무 것도 반환하지 않습니다.
jutky

아니요, 쿼리는 실제로 필요한 데이터를 제공했습니다. 이는 동일한 이메일을 가진 사람들의 이메일과 login_name입니다.
Libertine

email 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.