case when 구분 0 5 1,530

by stylebox [SQL Query] [2014.12.12 15:34:20]


안녕하세요.

 

select name, title, 

  case when (select count(*) from bb where no=A.no tel is not null) > 0 then 'Y'

  else 'N'

  end

from aa A 

 

 

실제쿼리는 테이블이 여러개사용중인데 예를 들어서 위와 같이 예제로 쿼리를 

되어 있어요

case when구문에 select로 조건을 주고 있는데 이방법이 괜찮은건지 다른방법이 있는지 

궁금해서 글을 남깁니다. 그리고 테이블 bb와 테이블 bb B 이렇게 별칭을 줘서 사용하는게 더 좋은가요?

 

감사합니다. 좋은 하루되세요.

by 마농 [2014.12.12 16:18:02]

aa 와 bb 와의 관계가??? 1:1 인가요? 1:n 인가요?

1:1 관계라면 아우터 조인으로 푸시는게 좋습니다.

1:m 관계라면 전체 카운트 보다는 1건만 체크하는 방식이 좋겠네요.

rownum <= 1 조건을 추가로 주시거나

count 방식이 아닌 Exists 방식이 좋겠습니다.

 

별칭은 성능과는 무관하구요.

가독성과 관련이 있겠네요.


by stylebox [2014.12.12 16:47:45]

마농이 매번 감사합니다.

select name, title, 

  case B.no is not null  then 'Y'

  else 'N'

  end

from aa A 

left outer join (select DISTINCT no from bb where tel is not null) B

on A.no=B.a_no

이렇게 하면 될까요? 죄송합니다. 

내공이 부족해서 귀찮게 하네요


by 백면서생 [2014.12.15 10:57:33]

-- 마농님이 바쁘신것 같아 제가 말씀드리면
-- case when 절을 아래와 같은 방식으로 하시라는 거겠죠.

select name, title
  ,case when exists (select 1 from bb where no=A.no and tel is not null) then 'Y'
        else 'N'
   end yn1
  ,case when (select 1 from bb where no=A.no and tel is not null and rownum <= 1) > 0 then 'Y'
        else 'N'
   end yn2
from aa A 

 


by 마농 [2014.12.15 11:04:45]

음.  Distinct 는 왜?

1:m 관계를 억지로 1:1 로 만들기 위해서 한건가요?

1:m 인 경우엔 백면서생님 하신대로 1건만 체크하는 방식으로 하세요.

1:1 인 경우라면 Distinct 없이 아우터 조인 하시면 됩니다.


by stylebox [2014.12.16 09:36:51]

마농님 답변감사합니다.

네 백면서생님이 답변주신 내용을 참고해서 

다시 해보도록 하겠습니다.

오늘하루도 화이팅하세요:)

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