[pgsql-jp: 36473] Re: サブクエリ内で特定のレコードを抽出したい。

Akira Nakamura nakamura_ml @ art.edisc.jp
2005年 11月 30日 (水) 09:48:23 JST


中村です。

私もよく似たような構造を作成しているのですが、婚姻しても、
姓、名、住所、電話番号が変わらない場合、住民テーブルに
レコードは作成されるのでしょうか?

作成されるなら、婚姻と住民テーブルの有効開始日を関連付ける
だけなので、そんなに苦労は無いのですが、作成されない場合の、
効率の良いSQLを私は書けませんでした。

仕方なく、テーブル構成を変更してTRIGGERを使って対応しています。
・住民テーブルに無効日を追加
・住民テーブルにTRIGGER BEFORE INSERTを設定
 TRIGGER内で住民ID=NEW.住民IDかつ無効日=9999/12/31の
 データの無効日をNEW.有効開始日-1日に置き換え
・Insertするデータの無効日を9999/12/31として登録

これで、婚姻.有効開始日 BETWEEN 有効日 AND 無効日とすれば簡単に
婚姻時の住民情報を取得することが出来ます。
ただし、データの変更や削除を行うなら夫々のTRIGGERが必要になるので
注意してください。
私は、追加、新しい情報から順に削除、だけを可能にするインターフェースを
作成しTRIGGER AFTER DELETEで、住民ID=NEW.住民IDかつMAX(無効日)のデータの
無効日を9999/12/31に置き換えています。

テーブル構成を変更しないで、パフォーマンスがそこそこ出るSQLがあれば、
私も教えて欲しいです。

--
nakamura_ml @ art.edisc.jp




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