AND 조건이 추가되는데 조회되는 ROW 가 오히려 늘어납니다? 0 3 1,367

by 실베 [MySQL] [2022.08.05 16:55:50]


어떻게된 영문인지 도저히 모르겠습니다... 

AND 조건이 추가되면 오히려 조회되는 row 가 늘어나는데 이럴수가 있나요..?

 

with recursive hsra_tmp as (
          select t.*, t.hsra_id root_id, 1 lev, concat(t.hsra_req_title) as full_code_name
        from eso_hsra t where hsra_src_id is null
  union all
  select t.*, p.root_id, p.lev+1 lev, concat(p.full_code_name ,'/' , t.hsra_req_title) as full_code_name
    from eso_hsra t, hsra_tmp p where t.hsra_src_id = p.hsra_id
 )
select hsrp_id "key" ,
full_code_name AS hsrp_acc_proc
,hsrp_tas_id
,t.hsra_id
,x.hsrp_acc_proc
from eso_hsrp x ,hsra_tmp t 
 WHERE 1=1
and hsrp_acc_proc = t.hsra_id

 

원래 이렇게 있는 쿼리에서

AND x.hsrp_tas_id='TAS02306'  OR x.hsrp_tas_id='TAS02321' OR x.hsrp_tas_id='TAS02343'

 

해당 조건문을 추가하면 hsrp_tas_id 의 조건 데이터만 추려져야하는데 조회건수가 확 늘어납니다..

무엇이 문제일까요?

by 창조의날개 [2022.08.05 17:09:03]

WHERE 에서 AND와 OR가 혼용 되었을 경우 AND 먼저 실행하고 OR를 실행합니다.

그러므로 AND x.hsrp_tas_id='TAS02306'  OR x.hsrp_tas_id='TAS02321' OR x.hsrp_tas_id='TAS02343'를 추가하면

hsrp_acc_proc = t.hsra_id AND x.hsrp_tas_id='TAS02306'를 기준으로 먼저 데이터를 가져오고 x.hsrp_tas_id='TAS02321' 이거나  x.hsrp_tas_id='TAS02343'인 데이터도 가져오겠네요.

괄호를 이용하시면 됩니다.

AND (x.hsrp_tas_id='TAS02306'  OR x.hsrp_tas_id='TAS02321' OR x.hsrp_tas_id='TAS02343')

 

 


by 마농 [2022.08.05 18:01:54]
-- OR 조건은 괄호로 묶어줘야 합니다.
-- IN 사용이 편리합니다.
AND x.hsrp_tas_id IN ('TAS02306', 'TAS02321', 'TAS02343')

 


by 실베 [2022.08.08 13:25:50]

두분모두 답변 감사드립니다. 많이 배워갑니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입