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