[pgsql-jp: 35492] Re: 2つのテーブルの比較と優先抽出
KUGA Tsutomu
tsk @ nichigai.co.jp
2005年 6月 11日 (土) 21:02:03 JST
久我と申します.
石浦さん:
>共通(曜日)単位の共通テーブルと日毎単位の個別テーブルがあり
>たとえば次のデータがあるとします
>
>共通料金帯テーブルA (charge_dayは曜日)
> planid | charge_day | charge1 | charge2 | charge3 |
>--------+------------+---------+---------+---------+
(略)
>日毎料金帯テーブル(charge_dayは日)
> planid | charge_day | charge1 | charge2 | charge3 |
>--------+------------+---------+---------+---------+
(略)
``共通料金帯テーブルA''から``日毎料金帯テーブル''に存在するプランを
除いたものは
select * from 共通料金帯テーブルA
where planid not in (
select planid from 日毎料金帯テーブル
)
;
で得られますから,これと日毎料金帯テーブルを
union すれば求めるものが得られると思います.
例えば以下によって
planid | charge1 | charge2 | charge3
--------+---------+---------+---------
001 | 4000 | 5000 | 7000
003 | 0 | 4000 | 5000
(2 rows)
となります(今後数時間のうちは ;).
ご質問の中で部分的に主旨が読みきれない箇所があったため
自信がないのですが,お求めなのはこうしたことでしょうか.
-----
オフィス・リテロ
久我 力
=====
create temp table dow_rate_tbl (
planid varchar,
day_of_week int,
charge1 int,
charge2 int,
charge3 int
);
create temp table day_rate_tbl (
planid varchar,
day date,
charge1 int,
charge2 int,
charge3 int
);
insert into dow_rate_tbl values('001', 6, 4000, 6000, 8000);
insert into dow_rate_tbl values('002', 6, 0, 8000, 0);
insert into dow_rate_tbl values('003', 6, 0, 4000, 5000);
insert into dow_rate_tbl values('005', 6, 0, 0, 0);
insert into day_rate_tbl values('001', '2005-06-11', 4000, 5000, 7000);
insert into day_rate_tbl values('002', '2005-06-11', 0, 0, 0);
select * from (
select planid, charge1, charge2, charge3 from day_rate_tbl
where extract(dow from day) = extract(dow from current_date)
union
select planid, charge1, charge2, charge3 from dow_rate_tbl
where day_of_week = extract(dow from current_date)
and planid not in (
select planid from day_rate_tbl
where extract(dow from day) = extract(dow from current_date)
)
) as tmp
where charge1 > 0 or charge2 > 0 or charge3 > 0
;
=====
pgsql-jp メーリングリストの案内