[pgsql-jp: 26567] Re: PL/pgSQLで関数を作成したい

Jun Kitamura kitamura @ zoozee.jp
2002年 7月 3日 (水) 23:50:46 JST


北村@zoozee です。

> 以下のようなテーブル構造で
> create table a(
>     id integer,
>     name text
> );
> 
> データが
>  id         nm
> -----------------
>   1         aaa
>   4         bbb
>   5         ccc
>   8         ddd
>  10         eee
> と、あったときに、1〜10のID中から空いている5個のID(2,3,6,7,9)を
> 一度に取得できるSQLを書きたいのですが…

PL/pgSQL をどうしても使いたければ別ですが、
ダミーテーブル(tDummy_a)を作成し、1〜10(使う数の最大値までを
入れておきます。そのテーブルと上記(a)テーブルを排他結合すれ
ば良いのでは?

create table tDummy_a(
	dummy_id integer, primary key (dummy_id)
);

insert into tDummy_a values (1);
insert into tDummy_a values (2);
(snip)
insert into tDummy_a values (10);

select t1.dummy_id from tDummy_a t1
 where not exists (
  select * from a t2 where t1.dummy_id = t2.a
 ); -- 式1

実行していませんが、(予定では)

  dummy_id
------------
 2
 3
 6
(以下略)

ってな結果が得られるのでは。
上記 式1 をビューにしておけば良いかと。
カラム数によっては激遅かもしれませんが。

ではでは。





pgsql-jp メーリングリストの案内