Sqlite DB 쿼리문 예시

1. 다른 DB의 table 병합 예시

1.1. 작업 배경 및 목표

  1. DB aaa는 Cloud를 통해 공유되고 있으며, DB aaa의 aaa.table에 매일 정기적으로 새로운 Record가 RPA를 통해 추가
  2. aaa.table에 임시적 데이터 수정 작업이 이루어졌으나, 정기적 레코드 추가 작업 중 공유 충돌로 사본 DB bbb로 저장
  3. bbb.table의 변경 데이터가 aaa.table에 적용되어 있지 않아 이에 대한 반영 필요

1.2. 작업쿼리

  1. ’d:\temp\bbb.db’라는 경로의 DB 파일을 현재 연결(aaa.db)에 추가하고, 그 데이터베이스를 CONFLICT라는 별칭(Alias)으로 명명하는 query
    ATTACH 'd:\tenp\bbb.db' AS CONFLICT;
    
  2. 열려있는 DB의 press_release_list table의 pr_summary, pr_url, request_result 컬럼을 pr_id를 키값으로 하여 CONFLICT DB 데이터로 변경
     UPDATE press_release_list
     SET 
         pr_summary = (
             SELECT c.pr_summary 
             FROM conflict.press_release_list c 
             WHERE c.pr_id = press_release_list.pr_id
         ),
         pr_url = (
             SELECT c.pr_url 
             FROM conflict.press_release_list c 
             WHERE c.pr_id = press_release_list.pr_id
         ),
         request_result = (
             SELECT c.request_result
             FROM conflict.press_release_list c 
             WHERE c.pr_id = press_release_list.pr_id
         )
     WHERE pr_id IN (SELECT pr_id FROM CONFLICT.press_release_list);
    
  3. 에러 없이 실행 완료 확인
    결과: , 24837 행이 영향 받았습니다 데이터베이스에 쿼리가 성공적으로 실행되었습니다. 4398ms 걸렸습니다
    1번째 줄:
    ~ 이하생략 ~
    
  4. 검증
     SELECT res.pr_id, res.pr_summary AS main_summary, c.pr_summary AS conflict_summary,
         res.pr_url AS main_url, c.pr_url AS conflict_url,
         res.request_result AS main_result, c.request_result AS conflict_result
     FROM press_release_list res
     JOIN conflict.press_release_list c ON res.pr_id = c.pr_id
     WHERE res.pr_summary != c.pr_summary
     OR res.pr_url != c.pr_url
     OR res.request_result != c.request_result
     LIMIT 20;
    

【참고자료】