2016-03-20 14 views
1

Wenn ich Daten aus einer Gruppe von Tabellen finden müsste, wie die Länge aller Filme kombiniert mit dem Vornamen "Roderigo", würde ich das so machen?SQL Query-Lösung?

SELECT SUM(m.length) AS "Films with Roderigo" 
FROM movie m 
INNER JOIN movie_actor x 
ON (m.MOVIE_ID = x.MOVIE_ID) 
INNER JOIN actor a 
ON (x.ACTOR_ID = a.ACTOR_ID) 
WHERE a.actor_lname = 'Roderigo'; 
+0

Ja, das sollte die Arbeit machen. Habe gerade gemerkt, dass du 'actor_lname' in die Abfrage geschrieben hast, während die Frage 'Vorname' lautet. – AKS

+0

Oh, richtig, danke, dass du das bemerkt hast. – randdotname

Antwort

1

Nein, dies ist nicht wie Sie es im Allgemeinen tun. Es könnte in einigen Fällen funktionieren. Aber wenn Sie zwei Schauspieler mit dem Vornamen Roderigo haben, die im selben Film spielen, zählen Sie den Film zweimal.

SELECT SUM(m.length) AS total_length 
FROM movie m 
WHERE EXISTS (
    SELECT * 
    FROM movie_actor x INNER JOIN 
    actor a ON x.ACTOR_ID = a.ACTOR_ID 
    WHERE a.actor_fname = 'Roderigo' AND m.MOVIE_ID = x.MOVIE_ID 
) 

oder

SELECT SUM(m.length) AS total_length 
FROM movie m 
WHERE m.MOVIE_ID IN (
    SELECT x.MOVIE_ID 
    FROM movie_actor x INNER JOIN 
    actor a ON x.ACTOR_ID = a.ACTOR_ID 
    WHERE a.actor_fname = 'Roderigo' 
) 
+0

danke für das darauf hin. – randdotname

+0

@randdotname Gern geschehen, danke für die Annahme. – maraca

+0

wäre dies eine geeignete Antwort für die Suche nach dem Genre von Filmen, in denen Carey Mulligan war? 'DISTINCT f.genre AS "Carey Mulligan Genres" FROM Film m SELECT WHERE m.movie_ID IN ( SELECT x.movie_ID VON movie_actor x INNER JOIN Schauspieler ein ON x.actor_ID = a.actor_ID UND ein. actor_lname = 'Mulligan'); '" – randdotname