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