所以我想说我有这样的查询
SELECT a as d,b,c FROM myTable
WHERE a=1;
是否可以代替 a = 1键入类似SELECTED.1 = 1或以某种方式提取allias原始名称,因为d = 1不起作用
答案 0 :(得分:10)
由于关于何时评估WHERE子句的内部复杂性,不可能这样做。但是如果你是混淆的东西是一个你不想重复的长表达式,那么就有一个典型的解决方案。来自https://forums.oracle.com/forums/thread.jspa?threadID=1107532:
对此的标准解决方案是,您将查询移动到内联中 view(没有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中使用实际的列名,在这种情况下没有真正的缺点。
另请注意,如果使用此方法,则应尽可能多地在内部查询中添加WHERE子句(意味着不引用别名列的部分)以限制生成的别名的大小表。例如,如果您还想在示例中对b
进行测试,那将是:
SELECT d, b, c
FROM (
SELECT a AS d, b, c
FROM myTable
WHERE b = 1
) AS myAliasedTable
WHERE d = 1
答案 1 :(得分:2)
使用common table expression (CTE)例如
WITH T
AS
(
SELECT a as d, b, c
FROM myTable
)
SELECT *
FROM T
WHERE d = 1;