使用where子句中select子句的列号.提取别名原始名称

Vje*_*udi 7 sql oracle oracle11g

所以,假设我有这样的查询

    SELECT a as d,b,c FROM myTable
    WHERE a=1;
Run Code Online (Sandbox Code Playgroud)

是否有可能而不是= 1来键入SELECTED.1 = 1之类的东西或以某种方式提取allias原始名称,因为d = 1不起作用

Ben*_*Lee 10

由于关于何时评估WHERE子句的内部复杂性,不可能这样做.但是如果你是混淆的东西是一个你不想重复的长表达式,那么就有一个典型的解决方案.来自https://forums.oracle.com/forums/thread.jspa?threadID=1107532:

对此的标准解决方案是,将查询移动到内联视图(没有where子句谓词),然后在外部查询中使用别名添加where子句谓词.

所以像这样:

select ...
from (select ... here complex expression that is aliased ...
      from ...
      where ) A
where ... here condition that uses the A.alias column ...
Run Code Online (Sandbox Code Playgroud)

在您的示例中,那将是:

SELECT d, b, c
FROM ( SELECT a AS d, b, c FROM myTable ) AS myAliasedTable
WHERE d = 1
Run Code Online (Sandbox Code Playgroud)

但是,当然,这在你的文字例子中没有意义.如果你是别名的东西只是一个列名,那么只需使用WHERE中的实际列名,在这种情况下没有真正的缺点.

另请注意,如果使用此方法,则应在内部查询(即不引用别名列的部分)中放置尽可能多的WHERE子句,以限制生成的别名表的大小.例如,如果您还想b在您的示例中进行测试,那将是:

SELECT d, b, c
FROM (
    SELECT a AS d, b, c
    FROM myTable
    WHERE b = 1
) AS myAliasedTable
WHERE d = 1
Run Code Online (Sandbox Code Playgroud)