私は映画データベースでより多くのJOIN操作に取り組んでいます。私の質問は問題#16です:「アート・ガーファンクル」で働いたすべての人々をリストしてください
最初にArtGarfunkelが含まれるすべての映画を1つの値として取得し、次に同じ映画に含まれるすべての人の名前を最初の値と比較して取得する必要があります。
私は自分のクエリを思いついたのですが、ロジックでは動作するはずですが、タイムアウトが原因ではありません(非効率的なクエリが原因であると想定しています)
私の質問:
SELECT DISTINCT a.name
FROM actor a
JOIN casting b ON (a.id=b.actorid)
JOIN movie c ON (b.movieid=c.id)
WHERE c.title IN(SELECT z.title
FROM movie z
JOIN casting y ON (z.id=y.movieid)
JOIN actor x on (y.actorid=x.id)
WHERE x.name='Art Garfunkel')
別のバージョン:
SELECT DISTINCT actor.name
FROM movie,actor,casting
WHERE movie.id=casting.movieid
AND actor.id=casting.actorid
AND movie.title IN(SELECT movie.title
FROM movie,actor,casting
WHERE movie.id=casting.movieid
AND actor.id=casting.actorid
AND actor.name='Art Garfunkel')
これらは両方とも、上記に示されているものをクエリしようとしてタイムアウトが発生したことを示す解析エラーをスローします。
回答として受け入れられた、彼らが提供したクエリのバージョンは次のとおりです。
SELECT DISTINCT d.name
FROM actor d JOIN casting a ON (a.actorid=d.id)
JOIN casting b ON (a.movieid=b.movieid)
JOIN actor c ON (b.actorid=c.id
AND c.name='Art Garfunkel')
WHERE d.id!=c.id
私の論理はここで完全に間違っていますか?それとも、クエリが非常に非効率的であるということですか(私は考えています)。実行して正しい答えを得るように修正する方法はありますか?それとも、正しいクエリが行う方法をより論理的に考える必要がありますか?
非常に多くの質問がありましたが、そのクエリが機能しなかった理由と次のステップについてのフィードバックが必要でした。