当我从脚本创建视图时,为什么列别名被原始列名替换?该脚本有效,视图失败。
脚本使用外部查询/内部查询a.k.a. query / subquery选择记录。子查询用于SELECT子句。每个子查询本身都是一个SELECT子句,它成为结果集中的一列。见http://www.techonthenet.com/mysql/subqueries.php。
子查询的SELECT子句中使用的别名将替换为其原始列名。用于为子查询指定简短名称的别名不会被替换。
这是一个元版本,因此您可以看到结构。
(
select avg(t1.column)
from t1
where ***`t1.`Date` = `t1.`Date`***
) as `Short column name`,
在View版本中,替换了别名后,子查询变为;
When
这样做的结果是平均值是在所有日期计算的,而不是仅在外部查询中指定为group by `Date`
order by `Date`
的日期。
另一个脚本以相同的方式构建,转换为视图而没有问题。别名保留。
在糟糕和良好的观点中使用的条款之间存在差异,但对我而言,它应该导致问题并不明显。
糟糕的观点以;
结束group by
而好的只有regex
子句结束。
另一个区别是在坏视图中别名的列可能是字段类型DATETIME,而良好视图中的列可能是INT类型之一。 (实际上是周(t1.Date)。
使用:
答案 0 :(得分:0)
SELECT
中的别名是指查询块的输出,而不是处理查询块。
执行所需操作的正确方法是使用带有表别名的相关子查询:
select touter.`Date` as **`*When*`**,
(select avg(tinner.column)
from t1 tinner
where `tinner.`Date` = touter.date
) as `Short column name`,
from t1 as touter
group by `Date`
order by `Date`;
我不知道为什么要计算所有日期的平均值。我希望它返回一个错误,或者可能是NULL
值。也许你真正的where
子句是t1.Date = Date
,你希望MySQL能够神奇地知道第二个Date
引用的内容。不要依赖魔法。使用表别名并明确。