2017-09-30 10 views
1

3つのアイテムの複数のセットを挿入する必要があります。すべてのセットで2つのアイテムが同じです。 私は$ 1の位置でこの句を入れたい:(TIME ZONE 'UTC' AT NOW FROM EPOCH())EXTRACTpostgresql、すべてのセットに2つの同じアイテムを持つ3つのアイテムのいくつかのセットを挿入します。

WITH data(serial_id, banned_ts, reason) AS (
    VALUES (x, $1, $2),(y, $1, $2),(z, $1, $2) 
    ) 
    INSERT INTO _serial_ids_banned (serial_id, banned_ts, reason) 
    SELECT d.serial_id, d.banned_ts, d.reason 
    FROM data d 
    WHERE NOT EXISTS 
     (SELECT 1 FROM _serial_ids_banned b 
     WHERE b.serial_id = d.serial_id); 

私はそれを行う場合は、節が3回を評価した(またはそれ以上に依存しますセットの数)。句を一度だけ評価し、すべてのセットで使用するようなクエリを作成することは可能ですか?

+1

'データと(serial_id、banned_ts、理由)は、例えば'(UNNEST(配列[X、Y、Z])、$ 1、$ 2を選択)など。 – Abelisto

+0

Abelisto、ありがとう!素晴らしいトリック!非常に明確な。 –

答えて

1

または明示有する参加:

t=# prepare so1(text,text) as 
with p(banned_ts, reason) as (values ($1,$2)) 
, sid(serial_id) as (values('x'),('y'),('z')) 
, data as (select * from sid join p on true) 
select * from data; 
PREPARE 
t=# execute so1('a','b'); 
serial_id | banned_ts | reason 
-----------+-----------+-------- 
x   | a   | b 
y   | a   | b 
z   | a   | b 
(3 rows) 
関連する問題