Oracle 别名查询结果
Posted
技术标签:
【中文标题】Oracle 别名查询结果【英文标题】:Oracle Alias Query Results 【发布时间】:2013-10-07 20:34:34 【问题描述】:我想为一个查询的结果设置别名,并在另一个查询中使用该别名。举个简单的例子,比如:
(select a from foo) as fooResults;
select b from bar
where b in fooResults;
显然,这种语法不起作用。有没有办法用香草 Oracle SQL 来完成这个?如果它需要 PL/SQL,语法是什么?搜索结果似乎都指向列或表的别名。
编辑:一个驱动因素是我希望以后能够在多个查询中使用 fooResults,如果可能的话。
【问题讨论】:
您是否尝试将fooResults
查询移动到 where 子句中的第二个查询? select b from bar where b in (select a from foo)
我考虑过,但我不希望它作为同一个查询的一部分。理想情况下,我将能够从多个其他查询中引用别名查询,而无需重写它。
【参考方案1】:
有几个选项。最干净的,假设你想保留别名,可能是使用WITH
子句
WITH fooResults
AS( SELECT a
FROM foo )
SELECT b
FROM bar
WHERE b IN (SELECT a
FROM fooResults)
如果您想在多个查询中使用该表达式,您实际上需要将fooResults
定义为一个视图。
无论fooResults
是在WITH
子句中定义的视图、内联视图还是子查询,您都必须在IN
子句中从它中提取SELECT
。不管fooResults
是如何定义的,你都不能做WHERE b IN fooResults
。
【讨论】:
这很有帮助,谢谢。您有什么建议可以使 fooResults 可用于多个查询,还是我需要将其定义为一个过程? 另外,有没有一种方法可以让我直接说出“fooResults 中的 b 位置”,而无需定义迷你子查询? @Travis - 更新了我的答案。以上是关于Oracle 别名查询结果的主要内容,如果未能解决你的问题,请参考以下文章