0

いくつかのテーブルを結合したビューを作成しました。

create view report as
select date,a,b,0,0 from table1
union all
select date,0,0,c,d from table2

私は日付のどこで選択します:

select * from report where date = '2013-01-01'

説明を見ると、実行の最後 (追加後) に where フィルターが実行されていることがわかります。追加する前に各テーブルの場所がどこになるようにビューを作成するにはどうすればよいですか。

ありがとうございました

postgres9.1 での使用

説明 :: (プライバシーを保護するために名前が変更されたテーブルと列)

"Aggregate  (cost=127286.88..127286.89 rows=1 width=8)"
"  ->  Subquery Scan on external_reports  (cost=0.00..127254.46 rows=12969 width=8)"
"        Filter: (external_reports.date = '2012-09-09 00:00:00'::timestamp without time zone)"
"        ->  Append  (cost=0.00..94831.27 rows=2593855 width=54)"
"              ->  Result  (cost=0.00..71.38 rows=10 width=112)"
"                    ->  Append  (cost=0.00..71.38 rows=10 width=112)"
"                          ->  Seq Scan on report1  (cost=0.00..14.26 rows=2 width=112)"
"                                Filter: ((x)::text = 'ADS'::text)"
"                          ->  Seq Scan on report2  (cost=0.00..14.26 rows=2 width=112)"
"                                Filter: ((x)::text = 'ADS2'::text)"
"                          ->  Seq Scan on report3  (cost=0.00..14.26 rows=2 width=112)"
"                                Filter: ((x)::text = 'ADS3'::text)"
"                          ->  Seq Scan on report4  (cost=0.00..14.26 rows=2 width=112)"
"                                Filter: ((x)::text = 'ADS4'::text)"
"                          ->  Seq Scan on report5  (cost=0.00..14.26 rows=2 width=112)"
"                                Filter: ((x)::text = 'ADS5'::text)"
"              ->  Seq Scan on report6  (cost=0.00..65421.34 rows=2459934 width=54)"
"              ->  Subquery Scan on "*SELECT* 7"  (cost=0.00..4739.22 rows=133911 width=52)"
"                    ->  Seq Scan on report___  (cost=0.00..3400.11 rows=133911 width=52)"
4

1 に答える 1

0

これを行う方法はないようです。各選択は分離され、結合は選択の後に行われるため、選択ごとにどこで行われますか。

于 2013-03-19T07:57:58.103 に答える