如何为复杂的 sql 查询获取中间数据。 PostgreSQL

Posted

技术标签:

【中文标题】如何为复杂的 sql 查询获取中间数据。 PostgreSQL【英文标题】:How to take an intermediate data for the complex sql query. Postgresql 【发布时间】:2015-08-19 07:03:45 【问题描述】:

我对 postgresql 有一些复杂的查询,这些查询从几个表中获取数据,这些表通过左外连接运算符相互连接。

我需要测试这些查询,所以我需要一个用于测试的夹具,它只包含我需要的数据,而不是整个表的数据。

如何查看这些连接子查询的中间结果以将其用作固定装置?

例如,我有表 A、B 和 C 并查询

SELECT A.column 
FROM A 
  LEFT JOIN B ON A.b_id = B.id 
  LEFT JOIN C ON A.c_id = C.a_id

当部分表显示需要的数据或像这样的东西。有没有现成的工具或方法呢?

很遗憾,EXPLAIN 和 ANALYZE 只显示统计数据和基准,而不是数据。

【问题讨论】:

这将是一件好事,但在 PostgreSQL 中,您最好的选择可能是执行部分查询以获得中间结果。 如果我对您的理解正确,您正在寻找一种方法来获得A left join B on A.b_id = B.id 的产品,但无需编辑查询。对吗? 【参考方案1】:

也许你的意思

SELECT A.*
FROM A 
  LEFT JOIN B ON A.b_id = B.id 
  LEFT JOIN C ON A.c_id = C.a_id
limit 10

从连接中查看 A 中发生了什么?

或许

select concat('from table a', a.col1, a.col2...) ,
concat('from table b', b.col1, b.col2...) 
from ...

concat等字符串函数:http://www.postgresql.org/docs/9.1/static/functions-string.html

还值得在 ​​array_append() 中查看 http://www.postgresql.org/docs/9.1/static/functions-array.html

【讨论】:

没有。我正在寻找类似 PgAdminIII 中的 Explain Query 之类的工具。也许是一个控制台命令或其他东西来自动化这个过程 @AlexeyProtchenko:pgAdmin 的“解释查询”输出仅使用本机 explain 语句的输出。因此,如果您要查找的信息在 pgAdmin 中显示的(图形)执行计划中,那么它也在 explainexplain (analyze, verbose) 的输出中 @a_horse_with_no_name,我的意思是我需要一个像解释查询这样的工具,它应该显示来自表的中间数据,而不是一个基准 @AlexeyProtchenko:对不起,我不明白。 pgAdmin 的解释计划显示的数据explain 命令的输出中可用。 pgAdmin 的解释计划输出究竟向您显示了您在“常规”explain 的输出中找不到的内容? @a_horse_with_no_name。不,我找不到所需的功能,既不是 pgAdmin 的解释,也不是简单的控制台解释分析。我在查询性能的每个步骤中都需要一个中间数据。就像 B 表数据的一部分用于连接到 A,而不是整个 B 表数据

以上是关于如何为复杂的 sql 查询获取中间数据。 PostgreSQL的主要内容,如果未能解决你的问题,请参考以下文章

Java/Hibernate:如何为复杂的 SQL 编写 DAO 代码

如何为以下操作创建 SQL 查询?

Grafana - 如何为 Mysql 数据源创建 sql 查询部分变量/宏

Angular2:如何为多个现有数据编写更新查询

使用 ajax-jquery 并使用 sql 查询获取数据。如何处理响应?

如何为以下 Scenerio 编写 linq 查询 [关闭]