在 postgresql 中输出多个 sql 查询的结果
Posted
技术标签:
【中文标题】在 postgresql 中输出多个 sql 查询的结果【英文标题】:Outputting results from multiple sql queries in postgresql 【发布时间】:2013-06-09 10:37:46 【问题描述】:我在本地机器(运行 Windows 7)上安装了 postgresql-9.2,我也是管理员。我正在使用 pgAdmin III 的查询工具 来查询我的数据库。我的问题如下:
假设我有两张表Table_A
和Table_B
,列数不同。另外,假设我有以下两个非常简单的查询:
select * from Table_A;
select * from Table_B;
我想同时运行这两个查询并查看它们的输出。我不介意在 GUI 或文件中看到输出。
我还尝试了复制命令并输出到 csv。但不是附加到文件,而是覆盖它。所以,我总是只得到来自查询 2 的结果。 GUI 也会发生同样的事情。
评论一个查询,运行另一个查询,输出到两个不同的文件,然后将这两个文件合并在一起真的很烦人。
【问题讨论】:
如果表结构相同,使用union
您可以使用union all
,根据需要使用null
填充列。表定义是什么?
@Denis -- 说这些是表结构: Table_A(col_A, col_B); Table_B(col_c, col_D, col_E, col_F)
@PS1:表定义不仅仅是列名。 Consider this comment
这听起来更像是一个关于 SQL 客户端的问题,而不是关于 Postgres 的问题。也许尝试不同的 SQL 客户端?
【参考方案1】:
PostgreSQL 目前不支持此功能 - 来自文档 (http://www.postgresql.org/docs/9.4/interactive/libpq-exec.html):
命令字符串可以包含多个 SQL 命令(以分号分隔)。在单个 PQexec 调用中发送的多个查询在单个事务中处理,除非查询字符串中包含显式的 BEGIN/COMMIT 命令以将其划分为多个事务。但是请注意,返回的 PGresult 结构仅描述从字符串执行的最后一个命令的结果。如果其中一个命令失败,字符串的处理将随之停止,返回的 PGresult 将描述错误情况。
【讨论】:
【参考方案2】:您的问题与客户无关。
假设所有列的类型都是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】:您可以使用 UNION ALL,但您需要确保每个子查询具有相同的列数。
SELECT 'a', 'b'
UNION ALL
SELECT 'c' ;
不会工作。
SELECT 'a', 'b'
UNION ALL
SELECT 'c', 'd'
会有用的
【讨论】:
以上是关于在 postgresql 中输出多个 sql 查询的结果的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 RECORD 在 PostgreSQL 中返回多行?