조인이 잘못된걸까요? 0 7 1,961

by 조남규 [Oracle 기초] 조인 아우터조인 [2013.09.05 12:34:11]


일단 현재 쿼리구요.

        SELECT A.LOG_DATE || A.LOG_TIME AS LOG_DATE
             , A.LOGIN_FG
             , A.CREATE_FG
             , DECODE(A.CREATE_FG, 'P', C.USER_NO, C.USER_ID) AS USER_NO
             , C.USER_NM AS USER_NM
             , A.LOGIN_ID
             , A.STORE_CD
             , DECODE('KR', 'KR', B.K_STORE_NM, B.G_STORE_NM) AS STORE_NM
             , A.IP_ADDR
        FROM AL_LOGIN A
                   , MM_STORE B
                   , AA_USER C
        WHERE LOG_DATE   BETWEEN '20130905' AND '20130905'
                   AND B.STORE_CD(+) = A.STORE_CD
                   AND C.STORE_CD(+) = B.STORE_CD
           AND A.LOGIN_FG = 'E'
           AND A.CREATE_FG = 'W'
           ORDER BY A.LOG_DATE, A.LOG_TIME

현재 저렇게 하면 CREATE_FG가 W이고 A.LOGIN_FG(로그인구분)값이 E(실패) 일때 STORE_CD가 있든 없든

보여주고 있거든요. 그런데 C의 USER_ID와 USER_NM이 표시가 되지 않아서요... 쿼리를 잘 몰라서 이리저리 바꿔봤는데

오류만 계속 뿜네요 A테이블에는 USER_ID와 USER_NM이 없습니다 A테이블에는 LOGIN_ID가 있구요

해당 쿼리는 로그인 로그를 남기는 쿼리구요...

부족한 설명 있으면 말씀드릴게요 ㅠㅠ 다른데이터는 출력이 되는데 사용자명과 id가 안나오는거에요..
by 아발란체 [2013.09.05 12:45:22]
알고 계시겠지만, LEFT OUTER JOIN으로 없는 데이타도 뜰 수 있는게 맞는데
이로 인해 안 뜨는 데이타가 왜 안 뜨는지를 물어보시는거 같은데,

안뜨는 것만 C테이블을 직접조회하여 사용 조건으로 데이타가 왜 없는지,
조건이 잘못 들어 간 것인지 확인이 필요해보입니다.

by 조남규 [2013.09.05 15:27:00]
확인했습니다.. 감사합니다

by 아린 [2013.09.05 12:52:39]
조인 KEY 가 맞나요?

aa_user 테이블의 user_id 와  al_login 테이블의 login_id 가  key 처럼 보이는데요.

그리고, 아래 DECODE 문장 부분은 잘못사용하고 있는것 같네요.
DECODE('KR', 'KR', B.K_STORE_NM, B.G_STORE_NM) AS STORE_NM

'KR' 은 항상 'KR' 이므로 B.K_STORE_NM 값만 나오겠네요. 




by 조남규 [2013.09.05 15:26:39]
감사합니다..

키가 잘못된것은 맞구요... 

디코드부분은 자바에서 함수로 호출하는건데 디비에서 테스트 하려고 그렇게 변환시켜 놓았습니다 ㅠㅠ

by 마농 [2013.09.05 14:41:22]
조인키가 잘못되었네요.
 - 변경전 : AND C.STORE_CD(+) = B.STORE_CD
 - 변경후 : AND C.USER_ID = A.LOGIN_ID

by 조남규 [2013.09.05 15:25:51]
답변감사드립니다. 조인이 잘못되었었구요...


내용 파악을 잘못했어서 그부분은 해결 했는데 p일때와 w일때 나눠서 union all로 작성해야 하거든요

그런데 ibatis로 구현되어있어서 그냥 union all로 하게 되면 isnotempty 조건을 쓸 방법을 모르겠네요..


by 조남규 [2013.09.05 15:27:29]
답변 채택이 한개밖에 안되는줄 몰랐네요 나머지 분들도 감사드려요 ㅠㅠ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입