두 쿼리의 카운트가 다른 이유를 알고싶습니다. 0 6 766

by matrixkdg [2016.12.15 11:19:30]


안녕하세요 질문좀 하게되었습니다.

1)

SELECT COUNT(1)
FROM (
SELECT A.*
FROM    TBL_PYRAMID_DOOR_SALESMAN A
             ,(   SELECT PYRAMID_CORP_CD , TELECOM_CD
                FROM    TBL_PYRAMID_CORP_TELECOM                
                GROUP BY PYRAMID_CORP_CD , TELECOM_CD ) B
WHERE 1=1
AND         A.PYRAMID_CORP_CD  = B.PYRAMID_CORP_CD(+) 
)

 

2)

SELECT COUNT(1)

FROM (
SELECT A.* 
                ,(   SELECT TELECOM_CD
                     FROM    TBL_PYRAMID_CORP_TELECOM
                     WHERE PYRAMID_CORP_CD = A.PYRAMID_CORP_CD                
                     GROUP BY PYRAMID_CORP_CD , TELECOM_CD ) TELECOM_CD
FROM    TBL_PYRAMID_DOOR_SALESMAN A
)

인라인 쿼리의 경우에는 동일한 매핑 정보가 되어있어 그룹잡아서 조인하기 위함입니다.

TBL_PYRAMID_DOOR_SALESMAN 테이블에는 인적 정보가 들어있구요.. 20253건이 들어있습니다.

 

아래 쿼리는 예상대로 나왔지만 1번 쿼리는 왜 카운트가 다른지 제가 이해를 잘 못하겠습니다.

설명좀 부탁드리겠습니다..!

1.count 20336 

2.count 20253

 

 

 

 

by jkson [2016.12.15 11:30:30]

PYRAMID_CORP_CD가 key인가요? 1번에서는 a와 PYRAMID_CORP_CD별로 group화한 b와 조인하므로

PYRAMID_CORP_CD값 하나에 TELECOM_CD 가 여러개라면 중복 조인되겠죠. 해서 건수가 늘어나는 거죠.

그런데... 그렇다면 2번째 방식이면 한줄에 2건이 fetch 될 것이고.. 오류가 나야될 것 같은데 이상하네요?


by matrixkdg [2016.12.15 11:44:53]

pyramid_corp_cd 가 키는 맞습니다.

pyramid_corp_cd별로 telecom_cd가 붙는 경우이지만. 업무상 여러건이 나오지는 않는상태구요

해서 2번쿼리는 정상적인 카운트가 나오는데 1번쿼리는 왜 그렇게 나오지 않는것인가 하는.. 의문이 들어서 질문하게되었습니다.


by jkson [2016.12.15 11:48:33]
SELECT PYRAMID_CORP_CD, COUNT(DISTINCT TELECOM_CD)
  FROM TBL_PYRAMID_CORP_TELECOM
GROUP BY PYRAMID_CORP_CD
HAVING COUNT(DISTINCT TELECOM_CD) > 1

확인해보세요.

 


by 마농 [2016.12.15 13:08:40]

pyramid_corp_cd 하나당 telecom_cd 가 여러개인 경우가 존재하는 거구요.
2번 쿼리의 경우 에러가 나지 않은 이유는
COUNT 때문에 스칼라서브쿼리를 아예 무시해서 실행하지 않았기 때문입니다.
스칼라서브쿼리는 카운트에 영향을 미치지 않기 때문이죠.
count 빼고 그냥 쿼리하면 멀티로우 에러 발생할 것입니다


by Dev03 [2016.12.15 13:24:06]

아... 그런 이유 때문이군요.

jkson님 말씀대로 2번째 쿼리가 왜 오류가 안 났을까 생각했는데...

쿼리 변환으로 이해하면 되는건가요 ?


by jkson [2016.12.15 14:08:21]

그렇군요. 옵티마이저가 똑똑하네요.

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