“具有子句”中的未知列

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

  SELECT DISTINCT

customer.first_name

FROM

rental,

customer

WHERE

rental.customer_id = customer.customer_id

GROUP BY

rental.rental_id

HAVING

(

rental.return_date - rental.rental_date

) =(

SELECT

MAX(countRental)

FROM

(

SELECT

(

rental.return_date - rental.rental_date

) AS countRental

FROM

rental,

customer

GROUP BY

rental.rental_id

) AS t1

)

但我得到了错误:

1054-“具有子句”中的未知列“ rental.return_date”

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

回答:

如文档中所写

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

...

两者都应该工作正常。

以上是 “具有子句”中的未知列 的全部内容, 来源链接: utcz.com/qa/409881.html

回到顶部