2016-11-10 5 views
0

このような問題については、SQLの観点から考えると苦労しています。私はどのように私のクエリを構成する必要がありますか分からない。 filmfilm_actorに参加させてから、それをactorに参加させるべきですか?それとも私はそれを逆にするべきですか?私が行うことができましたすべてのSQL - ADAM GRANTが活動しているすべての映画の映画タイトルと言語名を見つけよう

は名前ADAM GRANTactorfilm_actorを結合するクエリを取得しますが、私はここから行く場所に迷ってしまいましたです。

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

インナーあなたは、クエリの範囲変数を削除NATURAL JOIN、(film_actoractor)を使用するだけでなく、検索条件「咲く明白なことを述べて」でき

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

に参加(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'; 

私は、このようなLANGの「名前などのデータ要素思考の学校の大ファンではありませんuage "はちょうどnameと呼ばれ、コンテキストlanguageはテーブル名から来ると想定されます。 Javaクラスでうまくいくものは必ずしもSQLに変換されるわけではないので、クエリで名前を変更する必要があります(SELECT name AS language_name...)。さらに、name属性はcategoryにあり、NATURAL JOINにはlanguagecategoryの両方が含まれていると問題が発生します。例えば、actor_idで成功したように、スキーマ全体でユニークで一貫した属性名を持つ方がはるかに優れています。

関連する問題