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 别名查询结果的主要内容,如果未能解决你的问题,请参考以下文章

如何使从 oracle 返回的结果集保持其列别名字符大小写

如何在 MySQL 中使用自动表别名生成查询结果?

Oracle查询总结

oracle--with as

mysql派生查询必须有别名问题记录

Oracle字段别名加as与不加的区别