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

[member] 테이블에서 일부 행의 email열 값은 동일합니다 .

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

일부 사람들은 다른 login_id를 사용했지만 동일한 전자 메일 주소를 사용했지만이 열에는 고유 제한 조건이 설정되지 않았습니다. 이제이 행을 찾아서 제거해야하는지 확인해야합니다.

이 행을 찾으려면 어떤 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


답변

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

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

login_idby의 목록을 얻으려면 두 번째 (중첩 된) 쿼리가 필요 합니다 email.


답변

수락 된 답변의 첫 부분은 MSSQL에서 작동하지 않습니다.
이것은 나를 위해 일했다 :

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


답변

이메일 열에 빈 값이 포함 된 경우이를 사용하십시오.

 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 = john123@hotmail.com) 

john123@hotmail.com이있는 모든 레코드를 login_id 값으로 리턴합니다.


답변

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

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