2016-09-06 11 views
1

나는 아래와 같은 쿼리가 중복 값을 갖는, 위의 쿼리에서선택 쿼리 - IN 절

SELECT count(*) from Employee where e_id IN (121, 234, 536, 234). 

, 234가 두 번 반복됩니다.

는 그러나 위의 쿼리 반환 count = 3 대신 내 질문은 내가 DISTINCT을 사용하지 않은 경우에 선택 쿼리에서 필터링되는 방식을 중복 데이터이다

4.와 함께 발생합니다.

또는 절 IN 데이터베이스 취급을 수행하는 방법을 , 그것은 일종의 List (중복 값) 또는 Set (고유 값) 또는 둘 중 하나입니다.

+0

당신이 성능에 미치는 영향을 알고 싶다면, 여기 봐 http://stackoverflow.com/questions/10944339/mysql-in-clause -performace-in-case-of-list-have-of-duplicate-elements-and-sorte –

답변

2

WHERE 절은 행만 필터링합니다. 그것들은 번식하지 않습니다.

행이 하나의 조건과 일치하거나 모든 조건이 중요하지 않은 경우. 행은 단순히 필터링되거나 필터링되지 않습니다.

당신이 중복, 다음 사용하려는 경우 JOIN :

select count(*) 
from employee e join 
    (select 121 as e_id union all 
     select 234 union all 
     select 536 union all 
     select 234 
    ) matches 
    using (e_id); 
+0

필자는 데이터베이스의 IN 절이 어떻게 처리되는지, List (중복 값) 또는 Set (유니크 값) 또는 둘 다. –

+0

@ ankur-singhal 어떤 차이가 있습니까? 행 하나가 결과가 아닙니다. 두 번 일치하면 그 결과입니다. – Barmar

+0

@ ankur-singhal 그것은 세트로 취급됩니다. 내 대답도 참조하십시오. – redneb

2

e_id IN (121, 234, 536, 234)은 술어로 작동합니다. Employee의 모든 행에 대해 e_id의 값이 list의 값과 일치하는지 확인합니다. 따라서 여기서는 (121, 234, 536, 234)을 세트로 처리합니다.