[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 メーリングリストの案内