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

17

我是Postgresql的新手,请帮助我解决问题。

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

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

例如,我正在从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
如何将前两个值存储到变量中,并在第三个查询中使用?

1
您可以使用“join”在查询中使用其他表中的信息。但是,需要更具体地了解您实际需要完成什么才能给出答案。 - user1919238
1
如果您能回答,我将不胜感激 :) - Devil's Dream
1
@Devil's Dream,问这样的一般性问题是没有意义的。有许多方法可以“组合”来自不同表的信息。说value_1,value_2...是无用的,因为我们不知道表是否与外键链接。您需要提供一个实际的三个表模式。我投票关闭它,因为这太过于泛泛而谈了。 - java
1
@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过滤子查询中的表。如果您将发布有关实际表的更多信息,我们将能够提供更好的答案。 - Elad
2
使用公共表达式 - user330315
显示剩余2条评论
1个回答

20

您可以使用以下查询:

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文档此处

您还可以在Stackoverflow上查看类似于此的帖子此处


4
如果我们查看您在此发布的文档链接,那么这个示例是不正确的。查询的最后一行应该是: select * from table_3 where column_1 = (select value_1 from v1) and column_2 = (select value_2 from v2)> 在这种简单情况下看起来没有意义,因为它很简单。但如果v1和v2的查询是复杂的,就会看到更多好处。 - DoArNa
如果存储的值中有多列(v1和v2),那么这是正确的。 - Abhishek Anand
2
正如 @DoArNa 所提到的,我不得不将查询改为类似于 where column_1 = (select value_1 from v1) 而不是 where column_1 = v1。这就是文档所说的,也是对我有效的方法。 - Sean McCarthy

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