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子句谓词.
所以像这样:
Run Code Online (Sandbox Code Playgroud)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
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)