6

我有一个文本文件,其中包含应该在我的表中删除的行的行号,如下所示:

3
32
40
55
[...]

如何获得与 PostgreSQL 兼容的 SQL 语句,该语句使用文本文件从表中删除这些行中的每一行?

4

2 回答 2

8

这样做一次可能看起来像这样:

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函数。如果表名或列​​名是动态的,则必须DELETE.

于 2011-10-05T14:52:48.523 回答
2

我的解决方案与 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;
于 2021-05-02T00:48:35.783 回答