[oracle]在哪里使用 select 子句中的列数条。提取 allias 原始名称

标签: oracle11g sql Oracle
发布时间: 2017/5/5 19:42:34
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

所以,让我们说我有一个像这样的查询

    SELECT a as d,b,c FROM myTable
    WHERE a=1;

是可能而不是 = 1,键入 SELECTED.1 类似 = 1 或以某种方式提取 allias 原始名称自 d = 1 不工作

解决方法 1:

它是不可能做到这一点由于内部关于当 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 ...

在您的示例中,将︰

SELECT d, b, c
FROM ( SELECT a AS d, b, c FROM myTable ) AS myAliasedTable
WHERE d = 1

但是当然,这不会在你的文字示例中道理。如果你是混叠的东西只是列名称,然后只是使用的实际列名称在哪里,没有真正的缺点在这种情况下。

此外请注意,是否您使用此方法,你应该把尽可能多的 WHERE 子句作为你可以在内部查询 (意思不要引用别名列的部分) 中,由此产生的别名表的大小限制。例如,如果你还想要试验 b 在您的示例中,这将是︰

SELECT d, b, c
FROM (
    SELECT a AS d, b, c
    FROM myTable
    WHERE b = 1
) AS myAliasedTable
WHERE d = 1
赞助商