在WHERE语句中无法识别列别名

Ben*_*Ben 4 mysql sql database column-alias

我对我创建的一个查询有一个奇怪的'问题'.鉴于下一个查询:

 SELECT 
 ID,
 DistanceFromUtrecht,
 (
  SELECT
   (MAX(DateUntil) - (ReleaseDays * 60 * 60 * 24))
  FROM
   PricePeriod
  WHERE
   PricePeriod.FK_Accommodation = Accommodation.ID
 ) AS LatestBookableTimestamp
FROM
 Accommodation
WHERE
 LatestBookableTimestamp < UNIX_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud)

phpMyAdmin不断抛出一个关于没有名为'LatestBookableTimestamp'的列的错误,即使我有一个由子查询检索的列,该别名.我也尝试过用tableprefix选择每一列.这不起作用.最后,我通过table-alias选择了所有列,并为表提供了别名.一切都没有运气.

有人能告诉我我做错了什么吗?我甚至搜索了一些资源,看看我是不是错了,但在很多情况下,互联网上的作者使用与我相同的语法.

Mch*_*chl 11

使用HAVING

HAVING
  LatestBookableTimestamp < UNIX_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud)

另一方面,你正在使用一个依赖子查询,这是一个糟糕的主观表现.

试试这样:

SELECT 
  a.ID,
  a.DistanceFromUtrecht,
  pp.LatestBookableTimestamp
FROM
  Accommodation AS a
INNER JOIN (
  SELECT
    FK_Accommodation,
    MAX(DateUntil) - (ReleaseDays * 60 * 60 * 24) AS LatestBookableTimestamp
  FROM 
    PricePeriod 
  GROUP BY 
    FK_Accommodation
) AS pp    
ON pp.FK_Accommodation = a.ID    
WHERE
  pp.LatestBookableTimestamp < UNIX_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud)


OMG*_*ies 6

您不能在WHERE子句中使用列别名.
MySQL(和SQL Server)将允许在GROUP BY中使用列别名,但它不受广泛支持.ORDER BY是支持列别名引用的最一致支持的位置.

使用:

   SELECT a.id,
          a.distancefromutrecht,
          b.LatestBookableTimestamp
     FROM ACCOMMODATION a
LEFT JOIN (SELECT pp.fk_accommodation,
                  MAX(DateUntil) - (ReleaseDays * 60 * 60 * 24) AS LatestBookableTimestamp
             FROM PRICEPERIOD pp
         GROUP BY pp.fk_accommodation) b ON b.fk_accommodation = a.id
    WHERE b.LatestBookableTimestamp < UNIX_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud)