首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle: WHERE子句中的引用别名子查询

Oracle: WHERE子句中的引用别名子查询
EN

Stack Overflow用户
提问于 2014-11-25 13:25:03
回答 1查看 855关注 0票数 0

我想在我的最外层的WHERE-clause中处理一些相当复杂的子查询。我知道这样一个事实,即我不能引用别名列的名称,因为SELECT-clause是在 WHERE-clause之后计算的。

因此,这将使不适用于

代码语言:javascript
复制
SELECT FirstName,
       LastName,
       (SELECT ComplexStuff FROM ComplexTables) ComplexColumn
FROM Table
WHERE ComplexColumn LIKE '%Foobar%';

我还知道替代方案,在WHERE-clause中重复子查询或包装整个SELECT-statement。

备选案文1

代码语言:javascript
复制
SELECT FirstName,
       LastName,
       (SELECT ComplexStuff FROM ComplexTables) ComplexColumn
FROM Table
WHERE (SELECT ComplexStuff FROM ComplexTables) LIKE '%Foobar%';

备选案文2:

代码语言:javascript
复制
SELECT * FROM
  (SELECT FirstName,
          LastName,
          (SELECT ComplexStuff FROM ComplexTables) ComplexColumn
  FROM Table)
WHERE ComplexColumn LIKE '%Foobar%';

第一个解决方案不是很容易维护,因为我必须重复每个子查询,这是一个坏习惯,特别是当子查询非常复杂的时候。

我的问题是:第二个解决方案在性能方面有多高的效率?如果我没有弄错,包装查询将始终返回所有条目,除非应用最外层的WHERE-clause,否则不会对它们进行筛选。我是否需要担心这一点,还是数据库优化器能够尽可能地将谓词向下推到内部查询中?我是甲骨文的,如果这有关系的话。

当我使用第二个选项时,是否还有其他的缺点,有大量的数据,并且希望我的查询执行得很好?

EN

回答 1

Stack Overflow用户

发布于 2014-11-25 14:28:36

代码语言:javascript
复制
SELECT a.FirstName,
   a.LastName,
   b.ComplexColumn
FROM Table a,
    (SELECT ComplexStuff ComplexColumn FROM ComplexTables) b
WHERE b.ComplexColumn LIKE '%Foobar%'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27127988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档