이럴 경우 어떤 조인을 사용해야 하나요? 0 4 1,352

by yozm0213 [2014.04.03 11:14:04]



테이블 2개가 있는데 임의로 ex1, ex2라고 하겠씁니다.

ex1 테이블에 데이터가 들어가면 서버에서 5분마다 데이터를 읽어들여

ex2테이블로 옮깁니다. 결국 ex1에 있던 데이터는 없어지고 ex2로 데이터가 옮겨지는데

그 시간이 5분정도의 간격이라 2개의 테이블을 조인하여 어느 한쪽에라도 데이터가 있다면

모든 데이터를 조회해오고 싶습니다.

union을 쓰지 않고 조인으로 이걸 해결할 방법이 있을까요?(테이블 구조는 같습니다)
by 김용학 [2014.04.03 11:23:06]
FULL OUTER JOIN을 이용하면 되요.

WITH ex1(SHOP, AMT) AS ( SELECT '명동', 1000 FROM DUAL UNION ALL SELECT '합천', 2000 FROM DUAL UNION ALL SELECT 'GS' , 3000 FROM DUAL ) , ex2(SHOP, AMT) AS ( SELECT '하남', 1230 FROM DUAL UNION ALL SELECT '합천', 2000 FROM DUAL UNION ALL SELECT '11st', 4000 FROM DUAL ) SELECT NVL(ex1.SHOP, ex2.SHOP) AS SHOP , NVL(ex1.AMT , ex2.AMT) AS AMT FROM ex1 FULL OUTER JOIN ex2 ON ( ex1.SHOP = ex2.SHOP ) ;

by 아발란체 [2014.04.03 11:27:29]

좀 다른 얘기인데,
5분마다 체크 할 때 접근하는 (평균적)데이타 규모에 따라 전략을 바꾸어야 하는게 좋지 않을까 합니다.
상황에 따라 조인으로 풀이하는 것이 굉장히 비효율적이 될 수 있습니다.
또한 위 상황에 범용적으로 만든다고 한다면 5분마다 조인은 추천하지 않으며
트렌젝션 테이블을 따로 두고 입력 데이타 발생 시 해당 테이블에 기록하고
5분 마다 이 테이블을 읽어 데이타가 있으면 업데이트 반영 후 내용을 전체 삭제하거나
입력 이벤트를 바로 감지하여 관련 메타 데이타를 두고 처리를 하는 등의 다른 방법을 추천합니다.


by yozm0213 [2014.04.03 11:46:24]
답변감사합니다. 데이터 양이 크지 않고 실제 커넥션을 생성하여 직접 테이블에 접근하고 있기 때문에 조언해주신 방법으로 처리는 힘들 것 같습니다. 5분마다 체크하는 구조가 아닌 실제 조회는 요청이
있을 때마다 실시간으로 검색을 해야되서요~

by 마농 [2014.04.03 11:35:21]
조인은 두집합을 연결하는거고
유니온은 두집합을 합치는거죠.
이 경우라면 유니온이 맞습니다.
그냥 UNION 이 아니고 UNION ALL 을 사용하셔야 겠지요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입