2016-03-19 3 views
4

私は映画の最長レンタル期間をsakilaデータベースで見つける必要があります。 'having句' 'having clause'の中の未知の列

不明な列 'rental.return_date' 誰もがなぜ知っている -

1054:

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 
    ) 

が、私はエラーを取得しています: 私はこのトライを持っていますか?私はあなたがselect句でRETURN_DATEとrental_dateを指定する必要がマニュアルに

The SQL standard requires that HAVING must reference only columns in the GROUP BY clause or columns used in aggregate functions. However, MySQL supports an extension to this behavior, and permits HAVING to refer to columns in the SELECT list and columns in outer subqueries as well.

を書き込んだとして、私は

答えて

10

を何をしないのです。..集約されたデータのはずだ列を使用していました。

2つのオプションがあります。

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

うまく動作するはずの両方が。

+0

お返事ありがとうございます。どのselect節ですか?私は3を得て、私はマイナス演算子の結果だけを得たい。 – mike

+0

最上位のSELECT。私は2つの可能性で答えを更新しました。 – piotrgajow

+0

最初のオプションのみが機能しましたが、実際には2番目のオプションが必要です。なぜなら、期間を表示する必要があるからです。 2番目のオプションは同じエラーを返します – mike