Where子句和Join-on子句中的Alias



由于逻辑执行序列的原因,我认为在WHERE子句和JOIN ON子句中使用别名是非法的。这两个子句位于SELECT之前,因此没有定义别名。

然而,我最近读了两个代码,它们在这两个子句中有一个别名,运行起来没有问题。

SELECT w1.id
FROM weather AS w1
JOIN weather AS w2 ON DATEDIFF(w1.recordDate, w2.recordDate) = 1
AND w1.Temperature > w2.Temperature;

这是在leetcode上,在JOIN子句中使用别名。

SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName = 'Around the Horn' 
AND c.CustomerID = o.CustomerID;

这是在W3school上,在Where子句中使用别名。

现在,我对使用别名的限制感到困惑。有什么想法吗?

我认为您混淆了别名和的别名。

表别名在FROM子句中定义。作为最佳实践,它们应该始终用于引用列名。在第一个示例中,w1w2的别名,w1.temperaturew2.temperature是<em]限定的列引用>。

别名在SELECT子句中定义:

select 'this is a ' as column_alias

column_alias不能用于与SELECT关联的ONWHERE子句。

最新更新