개발 Q&A

제목 특정 컬럼 값이 0인경우 조인시 데이터가 안나오는 문제 ...
카테고리 DB
글쓴이 정수리 작성시각 2018/05/02 09:10:02
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 9816   RSS

현재 조인하는 테이블들의 경우 

테이블명:ri_ST1 

ST1_ID (기본키) int 

st1Item varchar(대분류명) 

  테이블명:ri_ST2 

ST2_ID (기본키) int 

ST1_ID (ri_ST1 키값) 

st2Item varchar(중분류명) 

  테이블명:ri_ST3 

ST3_ID (기본키) int 

ST1_ID (ri_ST1 키값) 

ST2_ID (ri_ST2 키값) 

st3Item varchar(소분류명) 

  테이블명:ri_ST4 

ST4_ID (기본키) int 

ST1_ID (ri_ST1 키값) 

ST2_ID (ri_ST2 키값) 

ST3_ID (ri_ST3 키값) 

stCT(기간) 

stCTUnit(기간단위) 

stDT(점용) 

stDTUnit(점용단위) 

stMoney1(금액1) 

stMoney2(금액2) 

stMoney3(금액3) 

이렇게 구성되어 있습니다. 

화면에 출력시 

대분류 소분류 중분류 기간 기간단위  점용 점용단위 금액1 금액2 금액3 

 저런 순서로 리스트로 출력이 되고 있습니다. 

화면에 출력하는 쿼리는 위같이 되어 있습니다. 

  

문제는 대분류(ST1_ID),중분류(ST2_ID),소분류(ST3_ID) 키값이 모두 있는 경우에는 ri_ST4테이블에 등록되어 있는 stCT~stMoney3 까지의 데이터가 출력이 되는데 

ST3_ID가 없을 경우에는 데이터가 보이지 않습니다. 

예를 들어 

ri_ST4의 테이블에 데이터가 

ST1_ID ST2_ID ST3_ID  stDT~ stMoney3(이컬럼들이 실질적으로 화면에 출력하는 컬럼입니다.) 

 1        1          1      (데이터있음)  -A 

 2        2                  (데이터있음) -B 

  

위의 쿼리처럼 조인을 한후 출력하면 A의 stDT~stMoney3 값은 출력이 되지만 

B의 stDT~stMoney3값은 출력이 되지 않더라구요;; 

대략적으로 유추해본것은 

대분류 값이(ST1_ID) 필수적으로 들어 갑니다. 

ST2_ID, ST3_ID값은 있을수도 있고 없을수도 있습니다. 

하지만 제가 구성한 쿼리의 경우 ST1_ID,ST2_ID,ST3_ID 값이 모두 있는 데이터들만 출력이 되는 것 같더라구요;; 

제 나름 변경도 해보고 찾아보고 해봤지만 원하는 쿼리를 구성하지 못하여 글을 올리게 되었습니다. 

결론적으로 ST2_ID, ST3_ID  값이 없어도 stDT~stMoney3의 데이터가 출력되도록 하고 싶습니다 ㅜㅜ 

어떤 쿼리문으로 변경해야 제가 원하는 형태 데이터가 화면에 출력될수 있을까요?

select st1.ST1_ID, st2.ST2_ID, st3.ST3_ID, st1Item, st2Item, st3Item, stCT, stCTUnit, stDT, stDTUnit, st4.stMoney1, st4.stMoney2, st4.stMoney3, st4.syPercent from
ri_ST1 as st1 left join ri_ST2 as st2 on st1.ST1_ID = st2.ST1_ID  
left join ri_ST3 as st3 on st2.ST2_ID=st3.ST2_ID  
left join ri_ST4 as st4 on st3.ST3_ID = st4.ST3_ID 
where st1.ST_ID =5 order by st1.ST1_ID, st2.ST2_ID, st3.ST3_ID, st4.ST4_ID asc

 

 다음글 copy() 함수가 작동하지 않습니다. (2)
 이전글 현재 페이지가 뒤로가기로 넘어온 페이지인지 알 수 있는... (2)

댓글

변종원(웅파) / 2018/05/02 10:34:06 / 추천 0

left join ri_ST3 as st3 on st2.ST2_ID=st3.ST2_ID 

left join ri_ST4 as st4 on st3.ST3_ID = st4.ST3_ID

이 조건에 걸려서 데이터가 안나올수밖에 없습니다. 2, 3 값이 없을 경우에 당연히 해당조건이 아니니 못가져오겠죠.

구조가 잘못 되어서 그렇습니다.

분류테이블 1개(대중소 표현 구조)와 분류테이블 번호에 해당하는 상세정보 테이블, 이렇게 구성해야 합니다.