2017-10-28 45 views
0

SQLでクエリを実行しようとしています。データベースはIMBDのものです。複雑なサブクエリを使用したSQLの演習

enter image description here

だから、私は映画パルプフィクション(ID = 2175869)から俳優/女優を必要とするパルプフィクションの他の俳優/女優を持つ他のフィルムに共同で行動したことはありません:これはフォームです。

それはのようなものでなければなりません:

SELECT person_id FROM cast_info WHERE movie_id = 2175869 AND 
person_id NOT IN (SELECT) 

しかし、私は、第二の部分を行うにはどのようにそれを把握することはできません。パルプフィクションの複数の俳優がそれらで再生パルプフィクション以外のサブクエリとして後で使用

+0

@Samiを取得します。あなたは@ Harshilと同じものを参照していますか? –

+0

はい、彼は私と同じ質問をしています –

+0

おかげさまで、ありがとう、私は今学んでいます –

答えて

1

問い合わせ、返送映画は

SELECT movie_id 
FROM cast_info 
WHERE 
    movie_id <> 2175869 AND 
    person_id IN (SELECT person_id FROM cast_info WHERE movie_id = 2175869) 
GROUP BY movie_id 
HAVING COUNT(*) > 1 

は今すぐ入手、そのような映画の中でプレイしたことがないパルプフィクションで遊ぶ人々

SELECT person_id 
FROM cast_info 
WHERE 
    movie_id = 2175869 AND 
    person_id NOT IN (
     SELECT person_id FROM cast_info WHERE movie_id IN (
      SELECT movie_id 
      FROM cast_info 
      WHERE 
       movie_id <> 2175869 AND 
       person_id IN (SELECT person_id FROM cast_info WHERE movie_id = 2175869) 
      GROUP BY movie_id 
      HAVING COUNT(*) > 1 
     ) 
    ) 

注:1人の映画館で1人の俳優しかキャストできないと仮定しています。同じ俳優が同じ映画の異なる役割にキャストされる場合はCOUNT(*)COUNT(DISTINCT person_id)に置き換えてください。

+0

チェックすると、非常に大きなデータベースなので時間がかかりますが、実行中です。結果をすぐに投稿します。ありがとう! –

0

まずあなたがパルプフィクションから全ての関係者を参照する必要があります。そして、あなたはすべての俳優のデュオを見つける必要がある

SELECT person_id as pulp_actor_id 
FROM cast_info 
WHERE movie_id = 2175869 

を:

SELECT c1.person_id as actor1_id 
     c2.person_id as actor2_id 
FROM cast_info c1 
JOIN cast_info c2 
    ON c1.person_id < c2.person_id 
WHERE c1.movie_id = 2175869 
    AND c2.movie_id = 2175869; 

は、デュオはパルプフィクションの横に一緒に行動するすべての動画を検索。今

SELECT actor1_id, actor2_id, actor1_movies.movie_id 
FROM (SELECT c1.person_id as actor1_id 
      c2.person_id as actor2_id 
     FROM cast_info c1 
     JOIN cast_info c2 
     ON c1.person_id < c2.person_id 
     WHERE c1.movie_id = 2175869 
     AND c2.movie_id = 2175869) as duos 
JOIN cast_info as actor1_movies 
    ON duos.actor1_id = actor1_movies.person_id 
AND actor1.movie_id <> 2175869 
LEFT JOIN cast_info actor2_movies 
    ON duos.actor2_id = actor2_movies.person_id 
AND actor1_movies.movie_id = actor2_movies.movie_id 
WHERE actor2.movie_id IS NOT NULL; 

私はそれについてかなりよく分からないパルプフィクションからすべての俳優ではない最後の結果で

SELECT person_id as pulp_actor_id 
FROM cast_info c 
LEFT JOIN (SELECT actor1_id, actor2_id, actor1_movies.movie_id 
      FROM (SELECT c1.person_id as actor1_id 
         c2.person_id as actor2_id 
        FROM cast_info c1 
        JOIN cast_info c2 
        ON c1.person_id < c2.person_id 
        WHERE c1.movie_id = 2175869 
        AND c2.movie_id = 2175869) as duos 
      JOIN cast_info as actor1_movies 
       ON duos.actor1_id = actor1_movies.person_id 
      AND actor1.movie_id <> 2175869 
      LEFT JOIN cast_info actor2_movies 
       ON duos.actor2_id = actor2_movies.person_id 
      AND actor1_movies.movie_id = actor2_movies.movie_id 
      WHERE actor2.movie_id IS NOT NULL; 
      WHERE movie_id = 2175869) as duos 
    ON c.person_id IN (actor1_id, actor2_id) 
WHERE duos.movie_id IS NULL 
+0

ありがとう、私はそれを試してみますが、それは時間がかかります、私はあなたに結果を投稿します。 –

+0

Hola Jaime、Olverの答えを確認するのは、私より簡単です。 –

+0

Juan Carlos、gracias、voy aello –

関連する問題