database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39541 게시물 읽기
No. 39541
비어 있는 값 추출 관련 도움요청합니다.
작성자
김정묵(popolio)
작성일
2012-07-13 19:48
조회수
5,389

 

두개의 테이블이 있으며, 각각 4개, 3개의 데이터가 있습니다.

다섯가지 유형으로 데이터를 뽑으려 합니다.

1. 전부동일 : 키값 2개 및 데이터 동일

2. 데이터틀림 : 키값동일, 데이터 틀림

3. A 테이블에만 존재

4. B 테이블에만 존재

5. 같은 키1 값이 존재하지만 키2가 없는 경우

A table     B table     결과
key1 key2 data key1 key2 data  
1234 1 Y 1234 1 Y 전부동일
1234 2 Y       key2 없음
1234 3 Y 1234 3 N data값 틀림
4567 0 Y       A table ONLY
      8743 0 Y B table ONLY

 5번의 케이스를 따로 뽑고 싶은데 현재 4번의 케이스에 포함되어 버립니다.

생각해낸 방법이 ① 4번케이스를 뽑은 뒤,  ② A table의 key1 값을 group by 하여 

①, ② 테이블의 공통 key1 값을 뽑는 방법인데요.

 

데이터량이 양쪽테이블 다 십만 단위 이상되는 자료라 부하가 심하게 걸려서 다른 작업에 영향을 주지 않을까 걱정됩니다.

좀 더 효율적인 방법이 있을까하고 도움 요청글 올려봅니다.

 

좋은 주말 되세요~

이 글에 대한 댓글이 총 1건 있습니다.

with a as
(
select '1234' key1,    '1' key2,    'Y' data from dual union all
select '1234' key1,    '2' key2,    'Y' data from dual union all
select '1234' key1,    '3' key2,    'Y' data from dual union all
select '4567' key1,    '0' key2,    'Y' data from dual
), b as
(
select '1234' key1,    '1' key2,    'Y' data from dual union all
select '1234' key1,    '3' key2,    'N' data from dual union all
select '8743' key1,    '0' key2,    'Y' data from dual
)
select  a.*,
        case when a_data = b_data then '전부동일'
             when cnt > 1 and a_key2 is not null and b_key2 is null then 'key2없음'
             when nvl(a_data,b_data) != nvl(b_data,a_data) then 'data값 틀림'
             when a_key1 is not null and b_key1 is null then 'a table only'
             when a_key1 is null and b_key1 is not null then 'b table only'
             else '기타'
        end  결과
from (
select  a.key1 as a_key1,
        a.key2 as a_key2,
        a.data as a_data,
        b.key1 as b_key1,
        b.key2 as b_key2,
        b.data as b_data,
        count(*) over (partition by nvl(a.key1,b.key1)) cnt    
from a full outer join b
     on  a.key1 = b.key1
     and a.key2 = b.key2
) a
order by nvl(a_key1,b_key1),nvl(a_key2,b_key2)
 

ddd님이 2012-07-13 22:02에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39545Table access 순서와 table access path(방식)에 대해 질문 있습니다.^^
얄록
2012-07-17
4453
39543조회할때 한row에 추가로 3row를 더 넣고싶습니다. [1]
초보..
2012-07-16
4626
39542누적 금액 관련 쿼리 문의 [2]
진희
2012-07-16
5692
39541비어 있는 값 추출 관련 도움요청합니다. [1]
김정묵
2012-07-13
5389
39540오라클 blob필드에 이미지를 insert하고자 합니다. [1]
김승일
2012-07-13
5319
39538부분합계금액을 구하려면.. [1]
김인환
2012-07-12
6334
39537가로로 합계내기 [1]
질문자
2012-07-11
6104
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다