2016-04-29 50 views
6

Próbuję napisać zapytanie jak to w PostgreSQL 9.5.2:Jak upsert wiele wierszy w PostgreSQL

INSERT INTO a (id, x) 
    SELECT id, x FROM b 
ON CONFLICT (id) DO UPDATE 
    SET x = b.x 
    WHERE b.y < 100 

ale mam ERROR: missing FROM-clause entry for table "b". Muszę brakować czegoś podstawowego, ale jak mam się odwołać do wiersza wstawianego do klauzuli UPDATE? Czy jest jakiś inny sposób?

Odpowiedz

12

Sprzeczne wartości są dostępne za pośrednictwem excluded Alias:

INSERT INTO a (id, x) 
SELECT id, x 
FROM b 
ON CONFLICT (id) DO UPDATE 
    SET x = excluded.x;