如何从表中删除多个记录(在输入中获取多个值)

时间:2018-12-20 09:07:48

标签: sql postgresql

我想同时从表中删除多个记录。

样本输入:

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

输入将从应用程序中提供,即

ID可以是随机的-它会根据要求进行更改。

delete from mytable
where id = ....?

我想同时删除来自输入的多个ID。

3 个答案:

答案 0 :(得分:2)

要一次删除具有不同ID的多行,一种方法是使用IN

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

以下是一些文档和更多示例:http://www.postgresqltutorial.com/postgresql-in/

答案 1 :(得分:1)

您可以从json字符串中提取ID作为数组,并使用ANY运算符删除ID

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 );

Demo

这里是一个使用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

答案 2 :(得分:0)

也许一些动态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;