2016-11-10 26 views
0

對於像這樣的問題,我在SQL方面想了很多麻煩。我不知道我應該如何構建我的查詢。我應該在film_actor上加入film,然後加入actor?或者我應該換一種方式呢?SQL - 查找ADAM GRANT所執行的所有電影的電影標題和語言名稱

所有我已經能夠做的就是讓那個加入actorfilm_actor名爲ADAM GRANT查詢,但我失去了在哪裏何去何從。

SELECT * FROM (actor JOIN film_actor ON actor.actor_id=film_actor.actor_id) WHERE first_name = 'ADAM' AND last_name = 'GRANT' 

我試着做一些參加這些結果與電影,但我和我的語法得到的問題。

SELECT title FROM (actor JOIN film_actor ON actor.actor_id=film_actor.actor_id) WHERE first_name = 'ADAM' AND last_name = 'GRANT' JOIN film ON film.actor_id = actor_id 

回答

2

您應該使用內連接

SELECT 
    film.title 
    , language.name 
FROM film 
INNER JOIN language on film.language_id = language.language_id 
INNER JOIN film_actor on film.film_id = film_actor.film_id 
INNER JOIN actor on actor.actor_id = film_actor.actor_id 
WHERE actor.first_name = 'ADAM' 
AND actor.last_name ='GRANT' 
0

你可以使用NATURAL JOIN,從而消除從查詢的範圍變量(film_actoractor),以及在「說明盛開明顯的搜索條件(actor_id = actor_id):

SELECT title AS film_title, name AS language_name 
    FROM film 
     NATURAL JOIN film_actor 
     NATURAL JOIN actor 
     NATURAL JOIN language 
    WHERE first_name = 'ADAM' 
     AND last_name ='GRANT'; 

我沒有想到的是該校的大風扇,其中如「郎朗的名稱的數據元素uage「只是被稱爲name而上下文language應該來自表名。什麼在Java類中運行良好並不一定會轉化爲SQL,這就是爲什麼我發現我需要在查詢中使用重命名(SELECT name AS language_name...)。此外,您在category中有name屬性,並且如果您有NATURAL JOIN(包括languagecategory),則會出現問題。例如,您在整個模式中擁有獨特而一致的屬性名稱會更好,因爲您已成功完成actor_id