PostgreSQL with 자구 귀속

2395 단어 PostgreSQL기초
PostgreSQL에서 with 자구는 큰 조회에 사용되는 보조 보고서와 조회를 작성하는 방법을 제공합니다.그것은 복잡하고 대형 조회가 간단하고 읽기 쉬운 형식을 깨는 데 도움이 된다.
1. 시계 만들기
postgres=# create table tb9(id serial primary key,name character varying, parentid integer);
CREATE TABLE
postgres=# \d tb9
                               Table "public.tb9"
  Column  |       Type        |                    Modifiers                     
----------+-------------------+--------------------------------------------------
 id       | integer           | not null default nextval('tb9_id_seq'::regclass)
 name     | character varying | 
 parentid | integer           | 
Indexes:
    "tb9_pkey" PRIMARY KEY, btree (id)

2. 테스트 데이터 삽입
postgres=# insert into tb9 values(generate_series(1,5),'john',0);
INSERT 0 5
postgres=# insert into tb9 values(6,'john1',1);
INSERT 0 1
postgres=# insert into tb9 values(7,'john2',1);
INSERT 0 1
postgres=# insert into tb9 values(8,'john11',6);
INSERT 0 1
postgres=# select * from tb9;
 id |  name  | parentid 
----+--------+----------
  1 | john   |        0
  2 | john   |        0
  3 | john   |        0
  4 | john   |        0
  5 | john   |        0
  6 | john1  |        1
  7 | john2  |        1
  8 | john11 |        6
(8 rows)

3. with 자구
postgres=# with t as (select * from tb9 where parentid=1) select count(0) from t;
 count 
-------
     2
(1 row)
postgres=# with t(a,b,c) as (select * from tb9 where parentid=1) select a,b,c from t;
 a |   b   | c 
---+-------+---
 6 | john1 | 1
 7 | john2 | 1
(2 rows)

4. 여러 개의 with 자구의 결합 사용
parentid=1의 기록된 모든 하위 기록
postgres=# with t1 as (select * from tb9),t2 as(select * from tb9 where parentid=1) select t1.* from t1,t2 where t2.id=t1.parentid;
 id |  name  | parentid 
----+--------+----------
  8 | john11 |        6
(1 row)

5. 귀속
id가 1인 기록의 모든 하위 기록
postgres=# with recursive t as(select id,name,parentid from tb9 where id=1 union all select k.id,k.name,k.parentid from tb9 k,t where t.id=k.parentid) select * from t;
 id |  name  | parentid 
----+--------+----------
  1 | john   |        0
  6 | john1  |        1
  7 | john2  |        1
  8 | john11 |        6
  9 | john21 |        7
(5 rows)

좋은 웹페이지 즐겨찾기