2013-03-28 12 views
34

Próbuję utworzyć tymczasową tabelę, która wybiera tylko dane dla określonego register_type. Napisałem to zapytanie, ale to nie działa:Tworzenie tymczasowych tabel w 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) $ 

Używam PostgreSQL.
Czy możesz mi powiedzieć, co jest nie tak z zapytaniem?

+0

używam innej tabeli o nazwie rawdata.egauge faktycznie – user1970850

+10

* nie działa * nie jest ważny komunikat Postgres. Brakuje słowa kluczowego "AS", wybór nie powinien być w parathensis, a ty nie masz średnika (';'), aby zakończyć instrukcję. –

Odpowiedz

70

Prawdopodobnie chcesz CREATE TABLE AS - działa również na TEMPORARY (TEMP) tabelach:

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

Stwarza tabeli tymczasowej i kopiuje dane do niego. Stanu migawki danych, pamiętaj. To jest tak jak zwykły stół, ale znajduje się w pamięci RAM, jeśli temp_buffers jest wystarczająco wysoko ustawiony, jest widoczny tylko w bieżącej sesji i umiera na końcu. Po utworzeniu z ON COMMIT DROP umiera na końcu transakcji.

tabele Temp przychodzi pierwszy w domyślnym schematu ścieżki wyszukiwania, ukrywanie innych widocznych tabel o tej samej nazwie, chyba schematu kwalifikacje:

Jeśli chcesz dynamiczny, będziesz szukał CREATE VIEW - zupełnie innej historii.

Standard SQL również definiuje, a Postgres obsługuje również: SELECT INTO .
But its use is discouraged:

Najlepiej jest używać CREATE TABLE AS do tego celu nowego kodu.

Naprawdę nie ma potrzeby drugiego wariantu składni i SELECT INTO służy do przypisania w plpgsql, gdzie składnia SQL nie jest zatem możliwe.

pokrewne:


CREATE TABLE LIKE (...) tylko kopiuje struktura z innej tabeli i nie ma danych:

Klauzula LIKE określa tabelę, z której nowa tabela automatycznie kopiuje wszystkie nazwy kolumn, ich typy danych i ich nie-zerowe ograniczenia.


Jeśli potrzebujesz „tymczasowy” stolik tylko dla celów jednym zapytaniu (a następnie wyrzucić go) do „tabeli pochodzić” w CTE lub podzapytanie jest wyposażony w znacznie mniejszym obciążeniu:

+2

Nie wiesz, że "wybierz na" jest odradzane .... – Xin

Powiązane problemy