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