“'有条款'中的未知列

时间:2016-03-19 18:57:02

标签: mysql sql database having-clause

我需要在sakila数据库中找到电影的最长租期。 我试过这个:

{{1}}

但我收到错误:

1054 - 未知栏' rental.return_date'在'有条款'

有人知道为什么吗?我使用的列应该是汇总数据..我缺少什么

1 个答案:

答案 0 :(得分:27)

如文档中所述

  

SQL标准要求HAVING必须仅引用GROUP BY子句中的列或聚合函数中使用的列。但是,MySQL支持对此行为的扩展,并允许HAVING引用SELECT列表中的列和外部子查询中的列。

您必须在select子句中指定return_date和rental_date。

有两种选择:

SELECT DISTINCT
  customer.first_name,
  rental.return_date,
  rental.rental_date
FROM
  rental,
  customer
WHERE
  rental.customer_id = customer.customer_id
GROUP BY
  rental.rental_id
HAVING
  (
    rental.return_date - rental.rental_date
  ) =(
  ...

SELECT DISTINCT
  customer.first_name,
  (rental.return_date - rental.rental_date) as rental_duration
FROM
  rental,
  customer
WHERE
  rental.customer_id = customer.customer_id
GROUP BY
  rental.rental_id
HAVING
  rental_duration =(
  ...

两者都应该正常工作。