[pgsql-jp: 26485] Re: 期間を含む複数のテーブルをVIEW する方法

WADA Hiroyuki wada @ komine-ag.co.jp
2002年 6月 25日 (火) 09:15:05 JST


和田です。

Akira Nakamura wrote:

> ・例のデータは、判りやす用にa_tableに1件、b_tableに複数件のデータを
>  登録しましたが、a_table1件、b_table複数件のケースもあります。

ここのとこが意味不明ですが。
結合条件はいじりようがなさそうですが、日付はすべてが指定日を含む
という条件なので、startのmaxとendのminだけ見ればいいわけです。
3値のmaxとminを得る関数を作っといて(viewだから直接書いといても
いいですが)

CREATE FUNCTION max(date,date,date) RETURNS date AS'
SELECT CASE WHEN $1 < $2 THEN
  (SELECT CASE WHEN $2 < $3 THEN $3 ELSE $2 END)
ELSE
  (SELECT CASE WHEN $1 < $3 THEN $3 ELSE $1 END)
END;
' LANGUAGE 'SQL';
(minも同様)

> create view abc_table AS
> SELECT
>  a_table.name AS a_name,
>  b_table.name AS b_name,

max(a_table.start, b_table.start, c_table.start) AS start,
min(a_table.end, b_table.end, c_table.end) AS end

> FROM
>  a_table ,
>  b_table ,
>  c_table
> WHERE
>  a_table.a_id = c_table.a_id AND
>  b_table.b_id = c_table.c_id
ここまちがってます。      b_id
> ;

でいいと思います。
ところで、endは予約語なので""しないとカラム名に使えませんが。



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