Вставьте одинаковые значения для нескольких записей на основе списка идентификаторов

У меня есть база данных PostgreSQL, и я хочу вставить одно и то же значение для нескольких записей на основе имеющихся у меня идентификаторов записей.
Есть ли способ сделать условие WHERE в операторе INSERT? Например:

insert into Customers (new-customer) values ('t') where customer_id in (list)

person Riggs    schedule 10.05.2014    source источник
comment
Хотите обновить существующие записи?   -  person VMai    schedule 10.05.2014
comment
Ваш вопрос не ясен. Можете ли вы привести реальный пример, пожалуйста?   -  person Houari    schedule 10.05.2014


Ответы (2)


Да, вы можете сделать что-то вроде:

INSERT INTO customers(customer_id, customer_name)
    select  13524, 'a customer name'
where  13524 = ANY ('{13524,5578,79654,5920}'::BIGINT[])

Здесь будет добавлен клиент с идентификатором: 13524, поскольку его идентификатор есть в списке: {13524,5578,79654,5920}

Я надеюсь, что то, что вы ищете!

person Houari    schedule 10.05.2014

Чтобы вставить строку для каждого идентификатора в вашем списке, вы можете использовать unnest() для создания набора строк:

INSERT INTO customers(customer_id, column1)
SELECT id, 't'
FROM   unnest ('{123,456,789}'::int[]) id;

Если вы ошиблись и на самом деле имели в виду UPDATE существующих строк:

UPDATE customers
SET    column1 = 't'
WHERE  customer_id = ANY ('{123,456,789}'::int[]);
person Erwin Brandstetter    schedule 10.05.2014
comment
Незначительная синтаксическая ошибка: используйте ::int[] для приведения типа данных. - person pkExec; 05.02.2018
comment
@pkExec: спасибо, исправлено. - person Erwin Brandstetter; 05.02.2018