我有一个文本文件,其中包含应该在我的表中删除的行的行号,如下所示:
3
32
40
55
[...]
如何获得PostgreSQL兼容的SQL语句,该语句使用文本文件从表中删除这些行?
答案 0 :(得分:6)
执行一次可能如下所示:
CREATE TEMP TABLE tmp_x (nr int);
COPY tmp_x FROM '/absolute/path/to/file';
DELETE FROM mytable d
USING tmp_x
WHERE d.mycol = tmp_x.nr;
DROP TABLE tmp_x;
重复使用时,将其包装为plpgsql function,文件路径/表名/列名作为参数。如果表格或列名称是动态的,则必须使用EXECUTE作为DELETE
。
答案 1 :(得分:0)
我的解决方案与 Erwin 的略有不同。我会使用 IN
,因为执行 JOIN (USING) 会增加查询将处理的行数。
CREATE TEMP TABLE tmp_x (nr int);
COPY tmp_x FROM '/absolute/path/to/file';
DELETE FROM mytable d
WHERE d.mycol IN (SELECT nr FROM tmp_x);
DROP TABLE tmp_x;