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