我试图使用子查询来选择表的第一个元素,并对其进行其他过滤。
我的工作是基于对这个答案的一个类似问题的评论。我的查询略有不同,因为我正在对从子查询生成的表进行一些筛选。
select *
from (
select firstname, lastname
from employees
order by (lastname)
)
where
rownum = 1
AND lastname like :wildcard;我的问题是:像这样的额外过滤是否可能破坏子查询的顺序,使这种技术在某些情况下无法工作?
这个问题有一个明显的解决方案,您可以简单地将lastname like :wildcard过滤器移到子查询中,但我所使用的应用程序限制了我这样做(如果这使问题更加模糊,我很抱歉)。
编辑:
为了澄清我的应用程序限制,lastname like :wildcard过滤器不能出现在任何from子句子查询中。
为了尽可能地解释这个问题,应用程序在许多不同的地方使用不同的查询,并将根据上下文编辑查询。有时,应用程序用来自父查询的列引用替换:wildcard。根据实验,在from子句子查询中不能这样做(尽管我无法找到这方面的文档,我只能猜测原因)。
发布于 2015-04-27 20:43:53
我不明白为什么您无法更改内部子查询,但如果真的不能更改,则可能需要执行以下多个子查询:
select *
from (
select *
from (
select firstname, lastname
from employees
order by (lastname)
)
where lastname like :wildcard
)
where rownum = 1;按照您编写的方式,只有在按字母顺序查询姓氏时,才能得到正确的结果。如果查询类似"Smith“的内容,将返回0行。
https://stackoverflow.com/questions/29904541
复制相似问题