계속 비슷한 질문을 하는것 같아서..죄송합니다.
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절떄문에 원래 안먹히는것인지도..궁금합니다.
본의아니게 계속 비슷한질문을 하는것같네요..
감사합니다.
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;
전반적으로 문제가 많네요.
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 와 간략 설명
- 테이블간의 관계
- 원본 자료 샘플 예시
- 예시 자료로부터 원하는 결과 샘플
- 이러한 것들을 제시해서 질문해 주세요.