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