将查询结果存储在变量中以在 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“几何(多多边形)”数据类型
对于表中的行,将行保存在临时表中以在 plpgsql 的选择查询中使用其数据