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 31525 게시물 읽기
No. 31525
아웃터조인시 오른쪽 테이블값 하나만 가져오기
작성자
이창형(블루소년)
작성일
2007-08-02 16:34
조회수
2,589

A테이블
---------
id | etc1 | etc2....
a  | xxx | xxx ...
b  | xxx | xxx...


B테이블
---------
idx | id  | val1 | val2 |
1    | a  |   1    |
2    | a  |   2    |
3    | a  |   3    |
4    | b  |   1   |

이런 식으로 구성되어 있습니다.

A테이블은 무조건 가져와야하고 B테이블의 값이 여러개 나올 수 있는것 중 하나만 가져오도록 해야합니다.
idx(pk_B라고 하면)가 인덱스걸린 거라고 할때 /*+ index_desc(B PK_B) */인 값중 최근 값 1개를 가져오는 식으로
다음과 같이 실렉트되어야 합니다.

id | val1 | val2 | etc1 | etc2 |
a  | 3     |  ....
b  | 1     | ....

도저히 쿼리가 생각나지 않네요.
고수분들 좀 도와줍쇼.

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

 /*+ index_desc */  힌트는....
해당 테이블의 최근 데이터 몇 건...또는
WHERE절에 걸리는 최근 데이터 몇 건....
이렇게 뽑을 때 유용합니다.
게시판 같은 경우에는, 일련번호로 쫙 들어가는 거라서..
이 힌트가 유용합니다.

지금 님 같은 경우는, id 조건을 따로 받는게 아니여서...적용은 힘들거 같네요...


저는...다음처럼 짜봤습니다. 참고만 하세요.

create table tblA (id varchar2(10));
create table tblB (idx number(5), id varchar2(10), val1 number(1));

insert into tblA values ('a');
insert into tblA values ('b');

insert into tblB values (1, 'a', 1);
insert into tblB values (2, 'a', 2);
insert into tblB values (3, 'a', 3);
insert into tblB values (4, 'b', 1);

 

SELECT
  FROM tblA a, tblB b
 WHERE a.id = b.id
GROUP BY a.id


SELECT a.id, SUBSTR(b.vals,-(LENGTH(vals)-10)) as vals
  FROM tblA a
     , (SELECT id, MAX(SUBSTR(LPAD(TO_CHAR(idx),10,'0'),-10)||TO_CHAR(val1)) as vals
          FROM tblB
         GROUP BY id
        ) b
 WHERE b.id = a.id


차영인(Guideposts)님이 2007-08-02 17:44에 작성한 댓글입니다.
-- 실제로 인덱스스캔을 할지는 모르겠네요. 직접 확인해 보세요.
SELECT a.id
     , (SELECT /*+ INDEX_DESC(b pk_b) */ b.val1
          FROM b
         WHERE a.id = b.id
           AND b.idx > 0
           AND ROWNUM = 1
        ) val1
     , (SELECT /*+ INDEX_DESC(b pk_b) */ b.val2
          FROM b
         WHERE a.id = b.id
           AND b.idx > 0
           AND ROWNUM = 1
        ) val2
     , a.etc1
     , a.etc2
  FROM a
마농(manon94)님이 2007-08-03 08:34에 작성한 댓글입니다.
이 댓글은 2007-08-03 08:36에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
31528WHERE절에서 동적으로 검색할 컬럼이 바뀔경우에는? [5]
잔대가리
2007-08-02
2900
31527START WITH이거 좀 해결해주세요~ [3]
..
2007-08-02
2203
31526CLOB 항목을 UPDATE중 에러입니다. [3]
black
2007-08-02
2804
31525아웃터조인시 오른쪽 테이블값 하나만 가져오기 [2]
이창형
2007-08-02
2589
31524테이블 RENAME [2]
초보
2007-08-02
2330
31523안녕하세요.dbs폴더를 ftp로 copy할때 특정 파일에 대한 에러입니다.ㅜㅜ [5]
답답해요~
2007-08-02
1957
31521insert into 문에 대해서 [2]
안영진
2007-08-01
1484
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다