如何在`where`条件列表

时间:2018-04-25 16:09:17

标签: database postgresql loops

使用postgresql 9.5。

对于一个id,我可以查询如下:

select a,b from mytable where id = '1234' order by a,b;

Q1。
我在txt文件中有50个唯一感兴趣的id。如何一次性对所有50个id进行^查询?

(总体而言,mytable中有大约100000条记录)

Q2。
如果可能的话,我还想将结果递归地保存到不同的文本文件中。

我可以做1个文件

COPY "select a,b from mytable where id = '1234' order by a,b;" TO STDOUT CSVHEADER > '/tmp/1234.csv'

参考:psql - save results of command to a file
Save PL/pgSQL output from PostgreSQL to a CSV file

额外信息: 我在当地的机器上查询 postgres安装在AWS上。 (我已读取数据库的访问权限)。

1 个答案:

答案 0 :(得分:1)

您可以将包含ID的此文本文件导入临时表,并将其用作IN子句中的过滤器。

考虑一个包含这些ID的文件......

1
3

..和这个表结构和数据样本......

CREATE TABLE t (id SERIAL, val TEXT);
INSERT INTO t (val) VALUES ('foo'),('bar'),('foo2'),('bar2');

SELECT * FROM t;
 id | val  
----+------
  1 | foo
  2 | bar
  3 | foo2
  4 | bar2

将id导入临时表:

CREATE TEMPORARY TABLE tmp (id INT);
COPY tmp FROM '/tmp/ids.csv';

在查询中使用它:

SELECT * FROM t WHERE id IN (SELECT id FROM tmp);
 id | val  
----+------
  1 | foo
  3 | foo2
(2 Zeilen)

或使用COPY

导出
COPY (SELECT * FROM t WHERE id IN (SELECT id FROM tmp)) TO ... ;