EDIT: Orijinal kabul edilen cevabı olduğu gibi bırakıyorum, ancak lütfen a_horse_with_no_name tarafından önerilen aşağıdaki düzenlemenin DEĞERLER kullanarak geçici bir tablo oluşturmak için tercih edilen yöntem olduğunu unutmayın.
Eğer sadece bir tablo oluşturmak ve içine eklemek yerine, sadece bazı değerler arasından seçim yapmak istiyorsanız, şöyle bir şey yapabilirsiniz:
WITH vals (k,v) AS (VALUES (0,-9999), (1, 100))
SELECT * FROM vals;
Aslında benzer şekilde geçici bir tablo oluşturmak için aşağıdakileri kullanın:
WITH vals (k,v) AS (VALUES (0,-9999), (1, 100))
SELECT * INTO temporary table temp_table FROM vals;
DÜZENLEME: As, a_horse_with_no_name tarafından işaret docs o belirtmektedir CREATE TABLE AS...
işlevsel olarak benzer olan SELECT INTO ...
, ancak eski ikincisi bir üst olduğunu ve bu SELECT INTO
- bu başarısız olur böylece geçici bir değişkene bir değer atamak için plpgslq kullanılır O vaka. Bu nedenle, yukarıdaki örnekler düz SQL için geçerli olsa da, CREATE TABLE
form tercih edilmelidir.
CREATE TEMP TABLE temp_table AS
WITH t (k, v) AS (
VALUES
(0::int,-99999::numeric),
(1::int,100::numeric)
)
SELECT * FROM t;
Ayrıca, a_horse_with_no_name tarafından yazılan yorumlardan ve OP'nin orijinal sorusundan, bu değerler listesindeki doğru veri tiplerine bir döküm içerdiğini ve bir CTE (WITH) ifadesi kullandığını not edin.
Ayrıca, Evan Carrol'un cevabında işaret edildiği gibi, bir CTE sorgusu bir optimizasyon çitidir , yani CTE her zaman gerçekleşmiştir. CTE'leri kullanmanın birçok iyi nedeni vardır, ancak dikkatli kullanılmazsa oldukça önemli bir performans artışı olabilir. Bununla birlikte, optimizasyon çitinin gerçekten performansı artırabildiği birçok örnek vardır, bu yüzden bu, farkında olmamak, körlemekten kaçınmamak için bir şeydir.