[英]Unknown column in 'having clause'
我需要在 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 - Unknown column 'rental.return_date' in 'having clause'
有人知道為什么嗎? 我使用了一個應該是聚合數據的列。 我錯過了什么?
如文檔中所寫
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 =(
...
兩者都應該工作得很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.