[TIL_ORACLE] 오늘 알게 된 쿼리

이경영·2023년 6월 27일
0

오라클

목록 보기
23/43
  1. 세가지 테이블이 있을때
    1) 하나는 메인테이블
    3) 하나는 메인테이블의 서브테이블(히스토리 테이블)

  2. 3)의 메인테이블의 서브테이블은 '저장' 이라는 버튼을 눌러야지 히스토리가 INSERT됨 (처음은 INSERT, 두번째는 UPDATE(DEL_YN='Y'로)와 INSERT가 반복됨)

  3. 완료 또한 컬럼에서 YN을 N, Y로 표현하고 저장과 동일한 로직을 타게 됨

  4. 여기서 히스토리가 INSERT되기 전을 'N'으로 표기하고, 히스토리가 INSERT되고 완료전(3의 YN이 N일때)를 'N'으로
    히스토리가 ISNERT되고 완료이후 (3의 YN이 Y일때)를 'Y'로 표기해야함

이럴때 CASE WHEN 구문을 써서

   A.PK , .. 
   B.NAME, ..
CASE WHEN 
  (COUNT(A.PK) 
  FROM 서브테이블 B
  WHERE 로 PK들을 맞춘뒤
  AND YN의 조건 = 서브 테이블 YN의 조건 ) = 0 THEN 'N' 
  //어짜피 INSERT되기전에는 YN의 조건을 맞추더라도 COUNT가 0이 나올수밖에 없다! 
  
  WHEN 
  (COUNT(A.PK) 
  FROM 서브테이블 
  WHERE 로 메인테이블과 PK들을 맞춘뒤
  AND YN의 조건 = 서브 테이블 YN의 조건 ) =
  (COUNT(A.PK) 
  FROM 서브테이블 
  WHERE 로 메인테이블과 PK들을 맞춘뒤
  AND YN의 조건 = 'Y' ) THEN 'Y'
  ELSE 'N'

  
  FROM 메인테이블 A
  LEFT JOIN 서브테이블 B1
  ON ...
profile
꾸준히

0개의 댓글