我想同时从表中删除多个记录。
样本输入:
{"INPUT":{"ID":"2200038,2200039,2200073,2200019"}}
输入将从应用程序中提供,即
ID可以是随机的-它会根据要求进行更改。
delete from mytable
where id = ....?
我想同时删除来自输入的多个ID。
答案 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 );
这里是一个使用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;