2011-02-02 6 views
2

MySQL에 사용자 테이블이 있습니다.MySQL 사용자 테이블 : 동일한 전자 메일 주소를 가진 행을 찾습니다.

id | username | email 

전자 메일 주소를 기반으로 중복 된 사용자의 ID를 얻고 싶습니다. 그래서 기본적으로 이메일 주소가 테이블에서 1 번 이상 발견 될 수있는 사용자의 ID를 찾습니다. 쿼리가 인덱스를 사용하지 않는 것으로

SELECT id 
FROM users as users 
WHERE (
    SELECT count(id) 
    FROM users as users2 
    WHERE users.email = users2.email 
) > 1 

그것은, 좋아,하지만 매우 느리게 작동합니다

는 I는 다음과 같이 썼다. 다른 아이디어? 감사!

답변

5

솔루션 :

select u.id 
from users as u 
inner join 
( SELECT email 
    FROM users 
    GROUP BY users.email 
    HAVING count(id) > 1 
) as u2 on u2.email = u.email 
+0

이 그냥 예제 쿼리 같은 모든 아이디의 대신에 고유하지 않은 이메일을 사용자의 1 개 ID를 반환하지 않을까요? – gnur

+0

그래, 나도 그걸 시도했지만, 단지 1 ID/이메일을 반환하지만, 나는 모든 ID를 얻고 싶다. – sydo

+0

나는 쿼리를 업데이트했습니다 : –

관련 문제