[pgsql-jp: 35490] 2つのテーブルの比較と優先抽出

Hiroshi Ishiura issy777 @ e-entrance.org
2005年 6月 11日 (土) 19:03:33 JST


石浦です。

共通(曜日)単位の共通テーブルと日毎単位の個別テーブルがあり
たとえば次のデータがあるとします

共通料金帯テーブルA (charge_dayは曜日)
 planid | charge_day | charge1 | charge2 | charge3 | 
--------+------------+---------+---------+---------+
 001    |      6     |    4000 |    6000 |    8000 | 
 002    |      6     |       0 |    8000 |       0 | 
 003    |      6     |       0 |    4000 |    5000 | 
 005    |      6     |       0 |       0 |       0 | 

日毎料金帯テーブル(charge_dayは日)
 planid | charge_day | charge1 | charge2 | charge3 | 
--------+------------+---------+---------+---------+
 001    | 2005-06-11 |    4000 |    5000 |    7000 | 
 002    | 2005-06-11 |       0 |       0 |       0 | 

※2005-06-11 は土曜日=テーブルAの曜日(6)と等しい

共通用の料金帯テーブルAと日毎料金帯テーブルBがあり、日毎料金帯テーブル
Bにプランが存在していた場合日毎料金を優先し(ただし料金帯が1つも設定無
のものは検索から除外)、日毎料金テーブルにプランが存在しないものは共通料
金から抽出する(ただし料金帯が1つも設定無のものは検索から除外)
といった処理をしたいのですが、結果として

結果
 planid | 日毎存在 |料金なし |
--------+------------+--------
 001    |     ○   |    ○  |
 002    |     ○   |    ×  |
 003    |     ×   |    ○  |
 004    |     ×   |    ×  |

つまり検索結果として001と003の2件がヒットするようにしたい。

PHPのアプリケーション側でプラン単位で
if(テーブルBで存在していれば){
	テーブルBの料金を表示
}else{
	if(テーブルAで存在していれば){
		テーブルAの料金を表示
	}
}

というようにできるのですが、その日に料金帯が存在するプランをSQLで抽出
したいのです。

unionやcaseで試してみようとしたのですが望む結果が得られず・・・
うまい方法がありますでしょうか

よろしくお願いします

-- 
Hiroshi Ishiura <issy777 @ e-entrance.org>





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