从PostgreSQL中输出多个SQL查询的结果

11

我在本地机器上安装了 postgresql-9.2(运行在 Windows 7 上),并且我也是管理员。我正在使用 pgAdmin III 的查询工具 查询我的数据库。我的问题如下:

假设我有两张表 Table_ATable_B,它们的列数不同。同时,我有以下两个非常简单的查询:

select * from Table_A;
select * from Table_B;

我希望同时运行这两个查询并看到它们的输出结果。我不介意在GUI或文件中查看输出。

我还尝试了复制命令并将其输出到CSV文件。但是它并没有追加到文件中而是覆盖了原有内容。因此,我最终只能看到第二个查询的结果。GUI也是同样的情况。

每次都需要注释掉一个查询,运行另一个查询,将结果输出到两个不同的文件中,再将这两个文件合并起来,这真的很烦人。


如果表具有相同的结构,请使用 union - Clodoaldo Neto
1
您可以使用 union all,必要时用 null 填充列。表定义是什么? - Denis de Bernardy
@Denis -- 假设这是表结构:Table_A(col_A, col_B);
Table_B(col_c, col_D, col_E, col_F)
- PS1
@PS1:表定义不仅仅是列名。请考虑这个评论。 - Erwin Brandstetter
1
这更像是关于SQL客户端的问题,而不是关于Postgres的问题。也许尝试使用不同的SQL客户端? - user330315
4个回答

11
这在PostgreSQL中目前不支持 - 参见文档(http://www.postgresql.org/docs/9.4/interactive/libpq-exec.html):
命令字符串可以包含多个SQL命令(由分号分隔)。在单个PQexec调用中发送的多个查询将在单个事务中处理,除非在查询字符串中包含显式的BEGIN / COMMIT命令以将其分成多个事务。但是请注意,返回的PGresult结构仅描述从字符串执行的最后一个命令的结果。如果其中一个命令失败,则处理该字符串会停止,并且返回的PGresult描述错误条件。

4

您的问题与客户端无关。

假设所有列的类型都是text,请尝试此查询:

SELECT col_a AS col_ac, col_b AS col_bd
      ,NULL::text AS col_e, NULL::text AS col_f
FROM   table_a

UNION  ALL
SELECT col_c, col_d, col_e, col_f
FROM   table_b;

列名和数据类型由UNION SELECT的第一个分支定义。其余部分必须保持一致。


3
在pgadmin4的顶部菜单下TOOLS中的PSQL工具可以展示多个查询结果,不同于查询工具。在PSQL命令行工具中,你可以输入用分号分隔的两个或多个查询并会显示每个查询的结果。但是这是一个命令行工具,如果有大量数据,则结果并不理想。我在有很多更新需要连接起来,并且想查看每个更新受影响的行数时使用它。对于返回小型结果集的选择查询非常有效。 psql工具

1
这在2022年也很有用。谢谢。 - Milan

0

你可以使用 UNION ALL,但是需要确保每个子查询具有相同数量的列。

SELECT 'a', 'b'
UNION ALL
SELECT 'c' ;

无法工作。

SELECT 'a', 'b'
UNION ALL
SELECT 'c', 'd'

会起作用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接