小编典典

WHERE语句中无法识别列别名

sql

我创建的查询之一存在一个奇怪的“问题”。给定下一个查询:

 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()

phpMyAdmin一直在引发有关没有名为“
LatestBookableTimestamp”的列的错误,即使我有一个由子查询检索的列,也就是该别名。我也尝试过使用tableprefix选择每一列。第八,这没有用。最终,我通过表别名选择了所有列,并为表指定了别名。一切都没有运气。

有人可以告诉我我在做什么错吗?我什至搜索了一些资源来确定我是否记错了,但是在许多情况下,互联网上的作者使用的语法与我相同。


阅读 192

收藏
2021-05-23

共1个答案

小编典典

使用HAVING

HAVING
  LatestBookableTimestamp < UNIX_TIMESTAMP()

附带一提,您使用的是一个Dependentnt子查询,这对性能而言是一个糟糕的主意。

尝试这样:

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()
2021-05-23