2016-03-19 17 views
4

Bir filmin en uzun kiralama süresi sakila veri tabanında bulmak gerekir. i tray bu var:Bilinmeyen sütun 'in yan tümce'

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 
    ) 

ama hata alıyorum:

1054 -

herkes neden biliyor mu

'olan maddede' in Bilinmeyen sütun 'rental.return_date'? i RETURN_DATE belirtmek basıp fıkrada rental_date zorunda belgelerine

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.

yazıldığı gibi ben

cevap

10

eksik ben toplu veriler olması gerekiyor bir sütun .. kullandık.

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

veya

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

İkisi

sadece iyi çalışması gerekir:

iki seçenek vardır.

+0

Yanıtladığınız için teşekkür ederiz. hangi seçim maddede? Ben 3. var ve sadece onların eksi operatör sonucu – mike

+0

En üst SELECT istiyorum. Cevabı iki olasılıkla güncelledim. – piotrgajow

+0

sadece ilk seçenek çalıştı, ama aslında ikincisine ihtiyacım var çünkü süreyi göstermem gerekiyor. İkinci seçenek aynı hatayı verir – mike