2011-11-20 3 views
0
select DISTINCT(user),host from logins where ip in (
SELECT ip FROM logins group by ip HAVING COUNT(user) > 1) 

잘 작동합니다.예기치 않은 SQL 쿼리 동작. (DISTINCT)

select DISTINCT(user),host,time from logins where ip in (
SELECT ip FROM logins group by ip HAVING COUNT(user) > 1) 

시간 열을 추가하면 더 이상 별개의 사용자를 선택하지 않고 중복 된 값을 반환합니다. 왜 그렇게합니까? 정수 필드 (예 : id 및 time)를 추가 할 때만 발생합니다.

쿼리는 기본적으로 로그인 테이블에서 사용자를 혼동하는 IP로 가져옵니다. 한 명의 사용자가 두 번 이상 당겨서는 안됩니다.

답변

5

DISTINCT는 각 행에 대해 작동하는 기능이 아니며 모든 개별 사용자에게 시간이 동일하지 않으므로 distinct를 사용할 수 없습니다.

GROUP BY를 사용하고 time 열에 그룹 함수 (MAX, MIN, GROUP_CONCAT 등)를 사용하십시오.

1
SELECT user,host,time 
FROM logins 
WHERE ip IN (SELECT ip FROM logins group by ip HAVING COUNT(user) > 1) 
GROUP BY user 
+1

해결 방법을 설명하고 질문 작성자가 설명 된 동작을보고있는 이유를 설명하십시오. 이렇게하면 게시물의 품질이 향상되고 단일 문제를 해결하는 대신 독자의 지식을 업그레이드 할 수 있습니다. – Iravanchi