2016-03-19 2 views
4

Мне нужно найти в базе данных 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' в 'имеющей п'

Кто-нибудь знает, почему? Я использовал столбец, который, как предполагается, агрегированные данные .. Что я упускаю

ответ

10

Как написано в документации

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.

Вы должны указать 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 =(
    ... 

Оба должны работать нормально.

+0

спасибо, что ответили. в котором выбирается предложение? я получил 3. и мне нужен только результат его минус-оператора – mike

+0

Самый верхний SELECT. Я обновил ответ двумя вариантами. – piotrgajow

+0

только первый вариант работал, но мне действительно нужен второй, потому что мне нужно показать продолжительность. второй вариант дает ту же ошибку – mike

Смежные вопросы