2016-09-23 2 views
-1

Ich muss alle Titel von Filmen finden, die größere Wiederbeschaffungskosten als einige R-Rating Film haben.SQL-Sub-Abfrage, um Daten zu finden

Filmtisch hat ...

film_id, title, description, release_year, language_id, original_language_id, rental_duration, rental_rate, length, replacement_cost, rating, special_features, last_update 

Dies funktioniert nicht ...

SELECT 
    title 
FROM film 
WHERE replacement_cost > (SELECT 
    replacement_cost 
FROM film 
WHERE rating = 'R'); 

Antwort

0
SELECT title 
FROM film 
WHERE replacement_cost > 
    (SELECT MAX(replacement_cost) 
    FROM film 
     WHERE rating = 'R'); 

Sie benötigen Aggregation von irgendeiner Art der subselect ein Skalarwert zu machen. Wenn Sie MAX() in Ihrer Abfrage verwenden, erhalten Sie den höchsten ersetzbaren_Kosten eines bewerteten R-Films.

Um die ersatzkosten eines bestimmten Films zu erhalten, müssen Sie dasselbe tun, aber Ihre where-Anweisung so ändern, dass sie der gewünschte Film ist. sagen Sie die film_id dann wissen Sie tun können:

SELECT title 
FROM film 
WHERE replacement_cost > 
    (SELECT replacement_cost 
    FROM film 
     WHERE film_id = 123); 

Hinweis nahm ich aus MAX(), weil, wenn der Primärschlüssel oder Kriterien, die einen einzelnen skalaren Wert (1 Spalte 1 Zeile) aus der Tabelle, die Sie don wählen werden brauche eigentlich keine Aggregation.

Verwandte Themen