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

Akira Nakamura nakamura @ yse.yokogawa.co.jp
2002年 6月 24日 (月) 21:06:31 JST


こんにちは、中村と申します。

期間を含む複数テーブルをスナップショット(決まった日付)で参照する
VIEWを作っているのですが、WhereをVIEWで使用したテーブル分入力する事に
なってしまい、もう少し効率の良い方法が無いか探しています。
何か方法がありましたら教えて下さい。

<環境>
RedhatLinux6.2J
Postgres7.1


<構成>
a_table
a_id	|start		|end		|name
--------------------------------------------------------
1	|2002-01-01	|2002-12-31	|DATA1

b_table
b_id	|start		|end		|name
--------------------------------------------------------
1	|2002-01-01	|2002-12-31	|NAME1
2	|2002-01-01	|2002-12-31	|NAME2
3	|2002-01-01	|2002-12-31	|NAME3

c_table
a_id	|b_id	|start		|end
--------------------------------------------
1	|1	|2002-01-01	|2002-05-31
1	|2	|2002-06-01	|2002-09-30
1	|3	|2002-10-01	|2002-12-31

・a_tableとb_tableで定義されているデータそれぞれに有効期限(start〜end)が
 あります。
・c_tableで、a_tableとb_tableをIDで紐付けしていて、このデータにも有効期限が
 あります。
・例のデータは、判りやす用にa_tableに1件、b_tableに複数件のデータを
 登録しましたが、a_table1件、b_table複数件のケースもあります。


<私の限界>
create view abc_table AS
SELECT
 a_table.name AS a_name,
 b_table.name AS b_name,
 a_table.start AS a_start,
 a_table.end AS a_end,
 b_table.start AS b_start,
 b_table.end AS b_end,
 c_table.start AS c_start,
 c_table.end AS c_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
;

select 
 a_name,
 b_name
FROM
 abc_table
WHERE
 a_start <= '<指定日>' AND
 a_end >= '<指定日>' AND
 b_start <= '<指定日>' AND
 b_end >= '<指定日>' AND
 c_start <= '<指定日>' AND
 c_end >= '<指定日>'


<やりたい事>
以下のSQLで呼出せるVIEWの作成
select
 a_name , 
 b_name
FROM
 abc_table
WHERE
 start <= '<指定日>' AND
 end >= '<指定日>'


よろしくお願い致します。



--
横河システムエンジニアリング株式会社
 経営企画部 情報Gr
  中村 央<nakamura @ yse.yokogawa.co.jp>
   Tel:043-274-5701 Fax:043-274-5706 (内)725-2056



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