join문을 겉핥기식으로만 쓰다가 막혀서 질문드립니다ㅜ 0 3 7,174

by zumsim [SQL Query] 쿼리 TIBERO join문 [2024.10.22 14:50:53]


SELECT
    ORG_NM,
    E_CNT,
    M_CNT,
    E_CNT+M_CNT AS TOT
FROM
(
    SELECT 
        CASE WHEN ORG.ORG_NM LIKE '전라남도%' THEN '전남'
             WHEN ORG.ORG_NM LIKE '전라북도%' THEN '전북'
             WHEN ORG.ORG_NM LIKE '충청북도%' THEN '충북'
             WHEN ORG.ORG_NM LIKE '충청남도%' THEN '충남'
             WHEN ORG.ORG_NM LIKE '경상북도%' THEN '경북'
             WHEN ORG.ORG_NM LIKE '경상남도%' THEN '경남'
        ELSE SUBSTR(ORG.ORG_NM, 1,2) END ORG_NM,
        CASE WHEN ORG.ORG_NM LIKE '전라북도%' THEN 12.5 ELSE ORG.ORG_ORD END ORD,
        COUNT(CASE WHEN TUD.SCHOOL_LV = '01' THEN 1 END) AS E_CNT,
        COUNT(CASE WHEN TUD.SCHOOL_LV = '02' THEN 1 END) AS M_CNT
    FROM 테이블1 ORG
    LEFT OUTER JOIN 테이블2 TUD
    ON ORG.ORG_CD = TUD.OFFC_CD
    LEFT OUTER JOIN 테이블3 TUM
    ON TUD.USRID = TUM.USRID
    INNER JOIN 테이블4 RUM
    ON TUM.USRID = RUM.USRID AND RUM.ROLE_ID IN (63, 64)
    WHERE ORG.ORG_DIV = 1 AND ORG.ORG_TYPE = 1
      AND TUM.USR_SE_CD = 'USR' AND TUM.DEL_YN = 'N' AND TUM.TEST_ACCNT_YN = 'N'
    GROUP BY ORG.ORG_NM, ORG.ORG_ORD
    ORDER BY ORG.ORG_ORD
)
WHERE ORD IS NOT NULL;

 

이런 형태의 쿼리가 있는데 테이블1에는 기관정보가 있고

테이블2에는 학생들이 소속된 기관정보가 있는데

현재 특별한 이유로 테이블1에만 있고 2에는 없는 기관이 있습니다.

 

이런경우 현재 제가 짠 쿼리로는 그 기관이 아예 안나오는데 

담당자가 원하는 결과는 없어도 기관은 나오길 원하고 있어서 질문 남깁니다ㅜ

JOIN문은 기본인건 아는데 너무 겉핥기 식으로만 공부해서 질문드려요ㅜ

 

by 마농 [2024.10.22 16:30:57]

간단하게 a, b, c, d 로 표현할께요.
a > b > c 방향으로 아우터 조인이 진행되다가
d 에서 이너조인이 되었습니다.
이러면 아우터 조인이 무의미해 집니다.
a > b > c > d 까지 순차적으로 아우터 조인 하셔야 합니다.
조건절도 WHERE 절에 있는 b,c,d 에 대한 조건들을 다 ON 절로 옮기셔야 합니다.


by zumsim [2024.10.24 10:04:28]

아..!

답글 주신 2개 다 다시 한번 참고해서 해보겠습니다


by 마농 [2024.10.23 09:03:34]

질문 내용과는 별개로 쿼리가 이상한 점이 있는데.
- 원본의 지역명 및 출력순서를 이용해 그룹핑 하고 있는데?
- 가공된 지역명 및 출력순서를 이용해 그룹핑 해야 하는 것이 아닌지?

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