当前位置: 首页 > 面试题库 >

WHERE语句中无法识别列别名

傅胡媚
2023-03-14
问题内容

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

 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选择每一列。第八,这没有用。最终,我通过表别名选择了所有列,并为表指定了别名。一切都没有运气。

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


问题答案:

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


 类似资料:
  • 问题内容: 我懂了 “无效的列名daysdiff”。 Maxlogtm是日期时间字段。是让我发疯的小东西。 问题答案: 通常,您不能在子句中引用字段别名。(将其视为包括别名在内的全部内容,在该子句之后应用。) 但是,如其他答案所述,您可以强制将SQL视为在子句之前进行处理。通常使用圆括号来强制操作的逻辑顺序,或者使用通用表表达式(CTE)来完成此操作: 括号/子选择: 或参阅亚当的CTE版本答案。

  • 问题内容: 我知道在oracle / mysql / sqlserver语句中,您不能在子句中引用列别名,因为它是在之前执行的,但它在sqlite3中有效: 为什么在sqlite中这有可能? 问题答案: 使用启用了标志的sqlite3 : 从上面的指令堆栈可以看出,行的循环(第8-23行)针对表中的每一行对子句中的每个表达式重复执行and命令。 因此,要回答我自己的问题,sqlite引擎能够通过在

  • 问题内容: 我知道我可能需要进行分组才能完成此任务,但我不太了解。PostgreSQL 8.1 我需要将结果集限制为“原始> 2017-01-01”。原始设置在第11行中。它在Excel中作为一列返回,是一个日期。 目前,它返回的结果可以追溯到几年前的数据,而我们并不需要它。 更新:我已将选择内容更改为这样,它似乎正在工作-是否对这样做是否正确有任何想法?它只会一直盯着过去的180天。 问题答案:

  • 我正在做一个研究项目,我需要一个NLP程序来检测不同情况下的句子。我被建议使用OpenNLP,在阅读了它的维基页面后,我确信我会使用它。因此,我使用OpenNLP来检测句子以及任何不属于句子的单词或短语(也称为句子片段)。 如果您想重定向输入,OpenNLP接受. txt文件作为输入。如果您想使用. doc文件作为输入,您必须将其转换为. txt文件。我的问题就从这里开始。 我有很多不同格式的文件

  • 问题内容: 我将存储过程存储在asp.net应用程序中,如下所示: 但是在选择单词上说之后,我收到错误消息:- 错误SQL70001:在此上下文中无法识别此语句 好的,我认为使用Go word存在问题。当我搜索时,找到了解决方案,但在asp.net网站上没有asp.net应用程序。我在这里找到了解决方案,但在asp.net应用程序中找不到脚本文件。我可以在asp.net网站上找到它。我能做些什么

  • 我有存储过程asp.net应用程序如下: 但是我收到错误消息后 Go 单词在选择说: - 错误SQL70001:在此上下文中无法识别此语句 好的,我认为有使用Go word的问题 当我搜索时,我找到了解决方案,但在 asp.net 网站上没有 asp.net 应用程序。我在这里找到了解决方案,但我在 asp.net 应用程序中找到脚本文件。只是我可以在 asp.net 网站上找到它。我该怎么办?