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
운영게시판
최근게시물
PostgreSQL Tutorials 5411 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 5411
connectby 함수 사용하기
작성자
김상기(ioseph)
작성일
2004-07-16 14:15ⓒ
2004-07-16 14:17ⓜ
조회수
6,567

contrib 안에 보면, tablefunc 모듈이 있습니다. 이 모듈을 설치하면, connectby 함수가 설치되는데, 이놈이 오라클의 connect by 구문 비슷한 기능을 하네요.

그래서 간단하게 언급합니다.

template1=# select * from treetable;

 num | upper |  name
-----+-------+--------
   1 |     0 | 락
   2 |     0 | 재즈
   3 |     0 | 힙합
   4 |     0 | 알앤비
   5 |     1 | 하드락
   6 |     1 | 락앤롤
   7 |     2 | 빅밴드
   8 |     2 | 비밥
(8 rows)


이런 자료에서

template1=# select num, depth, pos 
from connectby ('treetable','num','upper','num','0',0)
as t (num int, upper int, depth int, pos int);

 num | depth | pos
-----+-------+-----
   0 |     0 |   1
   1 |     1 |   2
   5 |     2 |   3
   6 |     2 |   4
   2 |     1 |   5
   7 |     2 |   6
   8 |     2 |   7
   3 |     1 |   8
   4 |     1 |   9
(9 rows)


이런 형태로 select 할 수 있습니다.

이것을 다시 원본 테이블과 조인을 하면,

template1=# select b.pos, a.num, repeat('      ', b.depth - 1) || a.name 
from treetable a, 
(select num, depth, pos 
from connectby ('treetable','num','upper','num','0',0)
as t (num int, upper int, depth int, pos int)) b 
where a.num > 0 and a.num = b.num order by b.pos;
 pos | num |   ?column?
-----+-----+--------------
   2 |   1 | 락
   3 |   5 |       하드락
   4 |   6 |       락앤롤
   5 |   2 | 재즈
   6 |   7 |       빅밴드
   7 |   8 |       비밥
   8 |   3 | 힙합
   9 |   4 | 알앤비
(8 rows)


이렇게 만들어집니다.

오라클 만큼 깔끔하지는 못하지만, 그럭 저럭 필요할 때 유용하게 써 먹을 수 있겠네요. 특히 오라클 쪽에서 이쪽으로 옮겨야할 상황에서는 유용할 듯.

[Top]
No.
제목
작성자
작성일
조회
5520Slony-I의 Slonik명령에 대해 정리해보았습니다. [2]
천주현
2004-09-03
6107
5502SSL 보안 PostgreSQL 서버 운영하기 [1]
김상기
2004-08-25
11898
5421Slony-1을 이용한 멀티 슬레이브 리플리케이션 [1]
신기배
2004-07-22
6943
5411connectby 함수 사용하기
김상기
2004-07-16
6567
5383DB 인코딩 컨버전 (서버 <-> 클라이언트) [5]
신기배
2004-06-25
10081
5263익숙하지 않은 자료형 - oid (Object identifer type)
정재익
2004-03-31
9856
5245익숙하지 않은 자료형 -bytea (binary data types) [1]
정재익
2004-03-10
9610
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.056초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다