MSSQL 테이블 3개 OUTER JOIN 질문합니다. 0 11 4,431

by 김이수 [DB 기타] [2015.08.19 14:31:36]


T_HJD_CD_INFO ,  T_FMY_SITUA , T_MEM_SITUA 이 세 테이블이 있습니다. 

T_FMY_SITUA 테이블의 GROUP_NO을 SUBSTRING(#{GROUP_NO},1,8) 이런식으로 잘라서 T_HJD_CD_INFO의 DIVISION_CD 컬럼이라고 해줍니다. 

그리고 T_MEM_SITUA  테이블의 MEM_NO이라는 컬럼이 필요합니다..

그래서 이 테이블 3개를 조인시켜야할것 같은데. 

<!-- 페이징 처리용 -->
		SELECT *
 			FROM(select Row_Number() Over(Order By H.DIVISION_CD DESC) AS rownum, *
 		<!-- // 페이징 처리용 -->
 		
  		from T_HJD_CD_INFO AS H, T_FMY_SITUA AS F , T_MEM_SITUA AS M
 			WHERE H.DIVISION_CD = SUBSTRING(#{GROUP_NO},1,8) 
 		)A
 		
 		<!-- 페이징 처리용 -->
 		WHERE A.rownum BETWEEN #{beginIndex} AND #{endIndex} 
		<!-- // 페이징 처리용 -->

여기서

 T_MEM_SITUA  테이블의 MEM_NO이라는 컬럼을 어떻게 꺼내어 사용해줘야할지..모르겠습니다. 

조언..부탁드립니다. 

by 김이수 [2015.08.19 14:45:39]
<!-- 페이징 처리용 -->
		SELECT *
 			FROM(select Row_Number() Over(Order By H.DIVISION_CD DESC) AS rownum, *
 		<!-- // 페이징 처리용 -->
 		
  			from T_MEM_SITUA AS M, T_FMY_SITUA AS F 
  				LEFT OUTER JOIN T_HJD_CD_INFO AS H
  				ON M.MEM_NO = H.MEM_NO
 			WHERE H.DIVISION_CD = SUBSTRING(#{GROUP_NO},1,8)
 		)A
 		
 		<!-- 페이징 처리용 -->
 		WHERE A.rownum BETWEEN #{beginIndex} AND #{endIndex} 
		<!-- // 페이징 처리용 -->

이런식으로 짜봤는데....

여러 부분으로 구성된 식별자 "M.MEM_NO"은(는) 바인딩할 수 없습니다. 이렇게 에러가 나오네요...

예제를 보니 저렇게 사용하는게 맞던데..MSSQL이라 그런가요... 


by 아발란체 [2015.08.19 15:11:36]

M 테이블에 아닌 F 테이블에 OUTER JOIN 해서 M.MEM_NO를 찾아서 발생한 문제입니다.


by 김이수 [2015.08.19 15:11:58]
FROM T_HJD_CD_INFO AS A
 		LEFT OUTER JOIN T_MEM_SITUA AS M
 		ON A.MEM_NO = M.MEM_NO
 		LEFT OUTER JOIN T_FMY_SITUA AS F
 		ON A.DIVISION_CD = SUBSTRING(#{GROUP_NO},1,8)

이런식으로..해줘도 

MEM_NO이 문제네요....

by 마농 [2015.08.19 15:15:07]

앞선 질문에서도 언급드렸는데요...
조인 조건 누락 부분이 전혀 해결되지 않은 상태네요.
h, f, m 3개 테이블이면 최소 두개의 조인조건이 필요합니다.
그런데 f 와의 조인 조건이 없네요.


by 김이수 [2015.08.19 15:17:10]

그럼문제가.. MEM_NO에 대한 WHERE절을 추가해주면..되겠네요.. 

다시 해보겠습니다.. 


by 마농 [2015.08.19 15:18:19]

그런 문제가 아닙니다.

조인에 대한 이해 부족이 문제입니다.

지금 조인 구문을 전혀 엉뚱하게 작성하고 있습니다.


by 김이수 [2015.08.19 15:21:07]

예제를 보며 작성중인데... 제 것에 맞게 못고치는거보니.. 그런것같습니다.ㅠ 

JOIN을..다시 천천히 보고 다시해봐야겠네요.. 


by 마농 [2015.08.19 15:28:01]

우선 3개 조인 이전에 두개 조인구문부터 완성해 보세요.

조인 조건이 없는 쿼리입니다. 조인 조건을 찾아 보세요.


by 김이수 [2015.08.19 15:35:00]

넵 해보고 다시 올리겠습니다~감사합니다! 저는 처음에 WHERE절이 조건을 줬다고 생각하고..작성한건데..  그게아니었나봐요.  


by 김이수 [2015.08.19 15:42:51]

 from T_HJD_CD_INFO AS H, T_FMY_SITUA AS F
               WHERE H.DIVISION_CD = SUBSTRING(F.GROUP_NO,1,8) 조인 조건을 수정하였습니다....


by 겸댕2후니 [2015.08.19 17:22:26]

김이수님 테이블이 3개면 조인조건은 최소 2개가 나와야합니다.

A, B, C 라는 테이블이 있을때, 테이블연결을 위해서는 연결고리가 되는 컬럼이 필요하며

이 컬럼의 이름이 A와 B를 연결하는 컬럼을 각각 A.no, B.no라고 보고

B와 C를 연결하는 컬럼을 각각 B.pno, C.pno라 했을때

조건절은 where A.no = B.no and B.pno = C.pno와 같이

A-B-C 이 세가지 테이블을 연결할 수 있는 조건이 필요한 것입니다.

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