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