mssql left outer join 질문합니다. 0 5 1,346

by 김이수 [DB 기타] [2015.08.20 14:22:44]


계속 비슷한 질문을 하는것 같아서..죄송합니다.

join에 대한 조건절에 대해 숙지를 하고 쿼리를 다시짜봤습니다. 

SELECT DISTINCT (GROUP_NO), 
       ISNULL(REPLACE(REPLACE((
       SELECT MEM_NO FROM T_MEM_SITUA T WHERE T.GROUP_NO=M.GROUP_NO FOR XML PATH('')
       ),'<MEM_NO>',''),'</MEM_NO>',','),'') AS MEM_NO
  FROM (
        SELECT A.GROUP_NO, B.MEM_NO, H.DO_NM, H.GU_NM, 
				H.DONG_NM 
          FROM T_HJD_CD_INFO H LEFT OUTER JOIN T_FMY_SITUA A
            ON H.DIVISION_CD = A.GROUP_NO
						LEFT OUTER JOIN T_MEM_SITUA B
						ON A.GROUP_NO = B.GROUP_NO
         WHERE H.DIVISION_CD = SUBSTRING(A.GROUP_NO,1,8)
				 AND A.DEL_YN = 'N'		
       ) M;

 

여기서 ..문제는 조인자체에 대한 에러는 없습니다.  그런데 

T_HJD_CD_INFO 이 테이블의 
DO_NM, GU_NM , DONG_MM 컬럼을 가져오질 못하는것이 문제입니다.

현재 위의 쿼리를 실행해보면

GROUP_NO  MEM_NO 이렇게  두 가지만 나옵니다..

제가 원하는 결과값은

GROUP_NO  MEM_NO  DO_NM  GU_NM  DONG_NM 이렇게 나오길원합니다...

아니면 혹시 MEM_NO을 구하기위한 위의 DISTINCT절떄문에 원래 안먹히는것인지도..궁금합니다. 

본의아니게 계속 비슷한질문을 하는것같네요.. 

감사합니다. 

 

by 김이수 [2015.08.20 14:34:17]

3번째라인 말씀하신건가요?? 세 번째라인에도 컬럼명을 추가해봤는데..결과값의 변화가 없더라구요.. 


by 개발뉴비 [2015.08.20 14:35:43]
SELECT DISTINCT (GROUP_NO), 
       ISNULL(REPLACE(REPLACE((
       SELECT MEM_NO FROM T_MEM_SITUA T WHERE T.GROUP_NO=M.GROUP_NO FOR XML PATH('')
       ),'<MEM_NO>',''),'</MEM_NO>',','),'') AS MEM_NO,
      DO_NM,
      GU_NM,
      DONG_NM
  FROM (
        SELECT A.GROUP_NO, B.MEM_NO, H.DO_NM, H.GU_NM, 
                H.DONG_NM 
          FROM T_HJD_CD_INFO H LEFT OUTER JOIN T_FMY_SITUA A
            ON H.DIVISION_CD = A.GROUP_NO
                        LEFT OUTER JOIN T_MEM_SITUA B
                        ON A.GROUP_NO = B.GROUP_NO
         WHERE H.DIVISION_CD = SUBSTRING(A.GROUP_NO,1,8)
                 AND A.DEL_YN = 'N'    
       ) M;

 


by 김이수 [2015.08.20 14:37:16]

감사합니다...컬럼을 넣는 위치가..아예 잘못이었네요 감사합니다.. 


by 마농 [2015.08.20 14:43:01]

전반적으로 문제가 많네요.
1. 조건이 앞뒤가 맞질 않네요.
  - ON H.DIVISION_CD = A.GROUP_NO
  - WHERE H.DIVISION_CD = SUBSTRING(A.GROUP_NO,1,8)
  - 이 2개 조건이 같은 컬럼에 대한 조건인데 각각 다르게 사용되네요.
  - 둘중에 어느 조건이 맞는건지 확인하셔야 하구요.
  - Where 절에 조인조건을 써줬는데 조인조건은 On 절에 와야 하구요
2. Outer Join 컬럼을 Where 절에서 사용하네요.
  - AND A.DEL_YN = 'N'
  - 이렇게 아우터 조인 걸린 테이블의 컬럼에 조건을 주면 아우터 조인이 무의미해 집니다.
3. Distinct 사용도 잘못된 듯 하구요
  - 잘못된 조인으로 인한 중복 발생을 해결하려는 잘못된 시도로 보임
4. 지금 질문 스타일이 무작정 기존 구문에 끼워맞추기 식으로 넣으려는것 같은데요.
  - 기본 조인 구문에 대한 이해 정도 하고 난 뒤 접근해야 합니다.
  - 지금 에러를 안나게 하는게 문제가 아닙니다.
  - 논리적으로 맞게 조인이 되었는지가 더 큰 문제입니다.
5. 질문의 형태를 바꿔보세요.
  - 각 테이블의 PK 와 간략 설명
  - 테이블간의 관계
  - 원본 자료 샘플 예시
  - 예시 자료로부터 원하는 결과 샘플
  - 이러한 것들을 제시해서 질문해 주세요.


by 김이수 [2015.08.20 14:45:52]

넵..감사합니다 문제가 많은 쿼리였군요..

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