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 23971 게시물 읽기
No. 23971
쿼리가 궁금합니다. 도와주세요.
작성자
궁금이2
작성일
2005-09-06 15:11ⓒ
2005-09-06 15:59ⓜ
조회수
811

안녕하세요,

테이블 세 개에서 어떻게 데이터를 가져와야 좋을지 모르겠어서 질문을 올립니다.

TEST_A 에는 TEST_A의 PK를 포함해서 TEST_B의 key와 TEST_C의 key 를 포함하고 있습니다.

이 때, 결과값은 다음과 같이 얻어오고 싶습니다.

 

key1 key2 col1 col2 col3
---- ---- ----- ----- -----
1 100 AAA_1 AAA_2 BBB_1
1 500 AAA_1 AAA_2 CCC_1
2 101 AAA_1 AAA_2 BBB_1
3 502 AAA_1 AAA_2 CCC_1
4 103 AAA_1 AAA_2 BBB_1
4 503 AAA_1 AAA_2 CCC_1

즉 , A 테이블의 A_Bkey와 A_Ckey 둘 다 데이터가 있으면 각각 두 개의 로우로 데이터를 가져오고 싶습니다. 어떻게 해야할지 도움 부탁드립니다.

 

create TABLE TEST_A (
A_Akey int not null,
A_Acol_1 varchar(10) null ,
A_Acol_2 varchar(10) null ,
A_Bkey int null ,
A_Ckey int null
)

create TABLE TEST_B (
B_Bkey int not null,
B_Bcol_1 varchar(10) null ,
B_Bcol_2 varchar(10) null
)

create TABLE TEST_C (
C_Ckey int not null,
C_Ccol_1 varchar(10) null ,
C_Ccol_2 varchar(10) null
)

insert into TEST_A (A_Akey, A_Acol_1, A_Acol_2, A_Bkey, A_Ckey) values (1, 'AAA_1', 'AAA_2', 100, 500)
insert into TEST_A (A_Akey, A_Acol_1, A_Acol_2, A_Bkey, A_Ckey) values (2, 'AAA_1', 'AAA_2', 101, null)
insert into TEST_A (A_Akey, A_Acol_1, A_Acol_2, A_Bkey, A_Ckey) values (3, 'AAA_1', 'AAA_2', null, 502)
insert into TEST_A (A_Akey, A_Acol_1, A_Acol_2, A_Bkey, A_Ckey) values (4, 'AAA_1', 'AAA_2', 103, 503)

insert into TEST_B (B_Bkey, B_Bcol_1, B_Bcol_2) values (100, 'BBB_1', 'BBB_2')

insert into TEST_B (B_Bkey, B_Bcol_1, B_Bcol_2) values (101, 'BBB_1', 'BBB_2')
insert into TEST_B (B_Bkey, B_Bcol_1, B_Bcol_2) values (102, 'BBB_1', 'BBB_2')
insert into TEST_B (B_Bkey, B_Bcol_1, B_Bcol_2) values (103, 'BBB_1', 'BBB_2')
insert into TEST_B (B_Bkey, B_Bcol_1, B_Bcol_2) values (104, 'BBB_1', 'BBB_2')

insert into TEST_C (C_Ckey, C_Ccol_1, C_Ccol_2) values (500, 'CCC_1', 'CCC_2')
insert into TEST_C (C_Ckey, C_Ccol_1, C_Ccol_2) values (501, 'CCC_1', 'CCC_2')
insert into TEST_C (C_Ckey, C_Ccol_1, C_Ccol_2) values (502, 'CCC_1', 'CCC_2')
insert into TEST_C (C_Ckey, C_Ccol_1, C_Ccol_2) values (503, 'CCC_1', 'CCC_2')

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

걍 단순하게 생각해서 union을 걸면 어떠하실런지요.

TEST_A 테이블의 A_Bkey와 A_Ckey에 각각 별도의 인덱스 걸구

 

SELECT A_Akey, A_Bkey

FROM TEST_A a, TEST_B b

WHERE a.A_Bkey = b.B_Bkey

union (또는 union all)

SELECT A_Akey, A_Ckey

FROM TEST_A a, TEST_C c

WHERE a.A_Ckey = c.C_Ckey

 

나그네님이 2005-09-06 15:38에 작성한 댓글입니다.
이 댓글은 2005-09-06 15:39에 마지막으로 수정되었습니다. Edit

우선

insert into TEST_B (B_Bkey, B_Bcol_1, B_Bcol_2) values (100, 'BBB_1', 'BBB_2')
insert into TEST_B (B_Bkey, B_Bcol_1, B_Bcol_2) values (102, 'BBB_1', 'BBB_2')
insert into TEST_B (B_Bkey, B_Bcol_1, B_Bcol_2) values (103, 'BBB_1', 'BBB_2')
insert into TEST_B (B_Bkey, B_Bcol_1, B_Bcol_2) values (104, 'BBB_1', 'BBB_2')

에서 100,102,103,104 가 아니라 100,101,102,103이 들어가야하는게 아닌가 싶구요.........

 

만약그렇다면......

 

select A_AKEY, A_BKEY, A_ACOL_1, A_ACOL_2, B_BCOL_1
  from TEST_A, TEST_B
 where TEST_A.A_BKEY = TEST_B.B_BKEY
   and A_BKEY is not null
union all
select A_AKEY, A_CKEY, A_ACOL_1, A_ACOL_2, C_CCOL_1
  from TEST_A, TEST_C
 where TEST_A.A_CKEY = TEST_C.C_CKEY
   and A_CKEY is not null 
order by A_AKEY

 

모포님이 2005-09-06 15:44에 작성한 댓글입니다.
이 댓글은 2005-09-06 15:45에 마지막으로 수정되었습니다. Edit

나그네님, 모포님 답변 감사드립니다.

참고가 되었습니다. ^^

 

좋은 하루 보내세요~

 

ps.. 제가 실수로 빠뜨린 것 지적해주셔서 질문글을 수정했습니다.

 

궁금이2님이 2005-09-06 16:00에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
23975max 값 가져오기... [5]
2005-09-06
1253
23973두개의 쿼리문이 있는데 한개의 쿼리문으로 만들고 싶거든요 [2]
재키
2005-09-06
894
23972[질문]oracle 디렉토리 내 일부 파일이 삭제된 경우... [4]
강원진
2005-09-06
1272
23971쿼리가 궁금합니다. 도와주세요. [3]
궁금이2
2005-09-06
811
23969쿼리도와주세요. [1]
궁금이
2005-09-06
1194
23968hash partition -> range partition 이거 도저히 방법없나요? [2]
떨쁘가이
2005-09-06
1704
23967rman을 이용한 백업에서 level=0의 시점 [2]
이호한
2005-09-06
1103
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다