将查询结果存储在变量中以在 Postgresql 中的另一个查询中使用

Posted

技术标签:

【中文标题】将查询结果存储在变量中以在 Postgresql 中的另一个查询中使用【英文标题】:Store query result in variables to use in another query in Postgresql 【发布时间】:2016-04-07 19:21:44 【问题描述】:

我是 Postgresql 的新手。请帮我解决。

假设我有三个表,分别称为“table_1”、“table_2”和“table_3”

我想从 table_3 中获取与 table_1 和 table_2 相关的数据

比如我从 table_1 和 table_2 中检索 value_1 和 value_2

查询 1:

Select value_1 From table_1

查询 2:

Select value_2 From table_2

现在我想在 table_3 中使用这些值

查询 3:

Select * from table_3 where column_1 = value_1 and column_2 = value_2

如何将前两个值存储在变量中并在第三个查询中使用?

【问题讨论】:

您可以在join 的查询中使用来自其他表的信息。但是,您需要更详细地了解您实际需要完成的工作才能给出答案。 如果你能给出答案,我将不胜感激:) @Devil's Dream 问这样的一般性问题毫无意义。有很多方法可以“组合”来自不同表的信息。说 value_1,value_2 ... 是没用的,因为我们不知道表是否与外键链接。您需要提供一个实际的 3 表模式。我投票关闭它,因为这太一般了。 @Devil's Dream 您可以这样做:Select * from table_3 where column_1 = (Select value_1 From table_1) and column_2 = (Select value_2 From table_2) 请注意,此查询假定每个子查询仅返回 1 行。我不会将其发布为答案,因为它非常不合逻辑。您应该至少有一个 WHERE 来过滤子查询中的表。如果您发布更多关于您的真实桌子的信息,我们将能够提供更好的答案。 使用common table expression 【参考方案1】:

您可以使用以下查询:

with v1 as (select value_1 from table_1),
     v2 as (select value_2 from table_2)
select * from table_3 where column_1 = (select value_1 from v1) 
and column_2 = (select value_2 from v2);

如果 v1 和 v2 有多行,您可以使用 'in' 运算符而不是 '=' 运算符。

如需更多信息,请查看 PostgreSQL 文档here。

您也可以在 *** here 上查看类似的帖子。

【讨论】:

如果我们参考您在此处发布的文档链接,则此示例不正确。查询的最后一行应该是: select * from table_3 where column_1 = (select value_1 from v1) and column_2 = (select value_2 from v2)> 在这个简单的情况下看起来没有意义,因为它很简单。如果 v1 和 v2 查询很复杂,那么会看到更多的好处 如果存储值(v1 和 v2)中有多个列,则正确。 正如@DoArNa 提到的,我必须将查询更改为where column_1 = (select value_1 from v1) 而不是where column_1 = v1。这就是文档所说的,这对我有用。

以上是关于将查询结果存储在变量中以在 Postgresql 中的另一个查询中使用的主要内容,如果未能解决你的问题,请参考以下文章

在java中存储PostgreSQL/PostGIS“几何(多多边形)”数据类型

是否可以将代码包装在一个块中以在调用一个变量时执行整个块?

如何将 expr 的状态存储在警报规则中以在注释中使用它?

对于表中的行,将行保存在临时表中以在 plpgsql 的选择查询中使用其数据

将 PostgreSQL 函数包装在另一个中以有条件地组合结果

将插入的输出值存储._ID 到局部变量以在另一个查询中重用它