簡體   English   中英

“具有條款”中的未知列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM