как удалить несколько записей из таблицы (получить несколько значений на входе) - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу удалить несколько записей из таблицы одновременно.

Пример ввода:

{"INPUT":{"ID":"2200038,2200039,2200073,2200019"}}

Ввод будет предоставлен из приложения, т. Е.

IDможет быть случайным - он изменяется в зависимости от требований.

delete from mytable
where id = ....?

Я хочу удалить несколько идентификаторов, поступающих со входа одновременно.

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Может быть, какой-нибудь динамический sql поможет

EXEC SQL BEGIN DECLARE SECTION;
const char *stmt = "DELETE FROM tablename WHERE ID IN(?);";

EXEC SQL END DECLARE SECTION;

EXEC SQL PREPARE mystmt FROM :stmt;
inputdata varchar; -- remove unwanted parts of the string

EXEC SQL EXECUTE mystmt USING inputdata;
0 голосов
/ 20 декабря 2018

Вы можете извлечь идентификаторы из вашей строки json в виде массива и удалить их, используя ANY оператор

WITH t AS 
( 
  SELECT '{"INPUT":{"ID":"2200038,2200039,2200073,2200019"}}' AS input 
) 
DELETE FROM   mytable 
   WHERE  id = ANY ( SELECT unnest(
                          String_to_array(input::json->'INPUT'->>'ID',',')::int[]) 
                  FROM   t );

Демо

Вот демонстрация, использующая переменную Bind для ввода в psql.Обратите внимание, что UNNEST здесь не был нужен.

\set input '{"INPUT":{"ID":"2200038,2200039,2200073,2200019"}}'
knayak=# DELETE FROM  mytable WHERE
          id = ANY( String_to_array(:'input'::json->'INPUT'->>'ID',',')::int[] )
DELETE 2
0 голосов
/ 20 декабря 2018

Чтобы удалить несколько строк одновременно с разными идентификаторами, один из подходов заключается в использовании IN:

DELETE FROM mytable 
WHERE ID IN (2200038,2200039,2200073,2200019)

Вот некоторые документы и дополнительные примеры: http://www.postgresqltutorial.com/postgresql-in/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...