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 関数にラップします。テーブルまたは列の名前が動的である場合は、EXECUTEを使用する必要がありDELETEます。

于 2011-10-05T14:52:48.523 に答える
2

私はアーウィンのものとは少し異なる解決策を持っています。INJOIN (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 に答える