如何推断指定有 ' as
' 的列,如下所示:
select 'foo' as 'bar'
where 'bar' = 'foo'
order by 'bar'
我可以看到,"order by
"条款似乎接受"bar
"。 'where
"子句,只是做一个string-compare
,并返回假。 我会跳过用双引号转义引号,因为无论如何它都是string-compare
。有什么提示吗?谢谢!
SQL 子句 (select , from , where ,, order by ( 按特定顺序计算。 Order By 子句在 SELECT 子句之后计算,因此 Order By 子句知道别名的存在。where 子句在 select 子句之前计算,为此您有错误 .. 对于 WhereClasue You mus 在 Select 中重复相同的列名
在使用单引号的情况下,您只是比较字符串而不是列,如果您需要正确的方法,您应该使用
select 'foo' as bar
from dual
where 'foo' = 'foo'
order by bar
这不能这样做,因为别名 foo -> bar 仅在选择之外可用。在选择部分之前计算 where-子句。
select foo, bar
from
(
select foo, foo as bar
from dual
) as i
where bar = foo
order by bar
如果您的原始查询是子查询而不是按原样查询,这将起作用。所以像这样——
select bar from
(
select 'foo' as 'bar'
from dual
) where 'bar' = 'foo'
order by 'bar'