2013-03-28 8 views
34

特定のデータのみを選択するテンポラリテーブルを作成しようとしています。私はこのクエリを書いたが動作しません:SQLでのテンポラリテーブルの作成

$ CREATE TABLE temp1 
(Select 
    egauge.dataid, 
    egauge.register_type, 
    egauge.timestamp_localtime, 
    egauge.read_value_avg 
from rawdata.egauge 
where register_type like '%gen%' 
order by dataid, timestamp_localtime) $ 

私はPostgreSQLを使用しています。
質問に間違いがあると教えてください。

+0

私は* rawdata.egauge実際 – user1970850

+10

と呼ばれる別のテーブルには動作しません使用しています*有効なPostgresのエラーメッセージではありません。あなたは 'AS'キーワードが不足しています、selectはparathensisにあってはならず、ステートメントを終了するセミコロン('; ')はありません。 –

答えて

70

あなたはおそらくCREATE TABLE ASをしたい - もTEMPORARYTEMP)のテーブルのために働く:

CREATE TEMP TABLE temp1 AS 
SELECT dataid 
    , register_type 
    , timestamp_localtime 
    , read_value_avg 
FROM rawdata.egauge 
WHERE register_type LIKE '%gen%' 
ORDER BY dataid, timestamp_localtime

これはそれに一時テーブルとコピーデータを作成します。データのスタティックスナップショット、あなたを気に入ってください。これは通常のテーブルと似ていますが、temp_buffersが十分に高く設定されている場合はRAMにあり、現在のセッションにしか表示されず、最後に終了します。 ON COMMIT DROPで作成された場合、トランザクションの最後に死亡します。

一時テーブルスキーマ修飾しない限り、同じ名前の他の可視テーブルを隠し、デフォルトスキーマ検索パスで最初に来る:、あなたがダイナミックをしたい場合は

あなたはCREATE VIEWを探しています - まったく別の話です。

SQL標準でも定義されています。また、Postgresは、 SELECT INTO もサポートしています。
But its use is discouraged

これは、新しいコードでは、この目的のためにCREATE TABLE ASを使用するのが最適です。

2番目の構文バリアントの必要は本当にありません

、およびSELECT INTOは、SQL構文が結果的には不可能であるplpgsql、に代入するために使用されています。

関連:


CREATE TABLE LIKE (...)のみコピー別のテーブルから構造及びデータなし:

LIKE句では、新しいテーブル が自動的にすべてのカラム名、そのデータ型、およびNULL以外の制約をコピーするテーブルを指定します。あなただけの単一のクエリのために「一時的」のテーブルが必要な場合は


CTEに「派生テーブル」を(と、それを捨てる)、またはサブクエリはかなり少ないオーバーヘッドが付属しています:

+2

'select into'は気にしませんでした.... – Xin

関連する問題