스칼라 서브쿼리 사용 시 조건이 인라인뷰로 파고들지 못할 때... 0 3 1,717

by 미소애비 [SQL Query] [2013.05.24 18:57:55]



안녕하세요~~~

아래와 같은 쿼리를 시도해 봤는데요,

a 테이블의 PK와,
a 테이블의 PK와 1:N으로 FK가 연결 되는 b 테이블에서의 N의 건수
를 같이 뽑고 싶습니다.

물론 쿼리를 쪼개면 쉽기는 한데,
이를 스칼라 서브쿼리로 풀 수 있지 않을까 해보다가 막혔습니다.

select a.pk,
(
  select cnt from (
    select
    b.fk1, b.fk2, count(*) as cnt
    from table_b b
    where
    b.fk1 = a.uk1 and
    b.fk2 = a.uk2
    group by b.fk1, b.fk2
  )
) as cnt
from
table_a a;

실행이 안 되어서 알아보니,
두 테이블간의 조건이 인라인뷰 두 개를 파고들지 못한다는 것을 알게 되었습니다.
with 구문을 사용해서 회피하는 방법도 있던데요,
이래 저래 해 봐도 진전이 없어서 문의 드립니다.

고수님들의 가르침 부탁 드립니다.

감사합니다.
by 아린 [2013.05.24 19:13:36]
건수 cnt 만 가져오실려면 group by 따로 주시지 않아도 됩니다.

SELECT a.pk
     , (SELECT COUNT(*) cnt 
          FROM table_b b
         WHERE b.pk1 = a.pk
        ) cnt     
  FROM table_a a 

by 손님 [2013.05.25 22:28:34]
select a.pk,
  (
  with b_temp as(
  select fk1, fk2, count(*) as cnt
  from table_b
  group by fk1, fk2
  )
  select cnt
  from b_temp b
  where
  b.fk1 = a.uk1 and
  b.fk2 = a.uk2
  ) as cnt
from
table_a a;
-- OR
select a.pk,
  (
  select cnt
  from (
    select fk1, fk2, count(*) as cnt
    from table_b
    group by fk1, fk2
  ) b
  where
  b.fk1 = a.uk1 and
  b.fk2 = a.uk2
  ) as cnt
from
table_a a;

by 미소애비 [2013.05.27 10:12:50]

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