2017-03-04 13 views
0

私は3つのテーブル:俳優、映画、およびactor_filmで作業しています。俳優と映画には、id(主キー)と名前の2つのフィールドしかありません。 Actor_filmには、actorとfilmの2つのフィールドがあり、それぞれactorとfilm idを表す外部キーです。したがって、映画に4人の俳優がいた場合、同じ映画と4人の異なる俳優を持つ4人のactor_film作品があります。SELECTはSQLiteのCOUNTと干渉します

私の問題は、映画のID、映画の名前、ある映画の俳優の数を返すことです。しかし、テーブル全体の上にあるのではなく、私はそれがある俳優がいる映画のためだけであることを望んでいます。私は

/m/0f4_l|Pulp Fiction|1 /m/0zz10|Primary Colors|1

75%正確である

はなく、完全な物語を取得しています

SELECT af.film, f.name, COUNT(af.film) FROM film AS f, actor_film AS af WHERE af.actor = "/m/0f502" AND af.film = f.id GROUP BY af.film;

:私のようなものを照会現在

、。最初の2つの列は正しいですが、私はカウントが、映画に出演した回数(明らかに1で上限を付けた回数)だけでなく、actor_filmでカウントされた映画の中の俳優の総数表。

これはネストされたSELECTまたはINNER JOINを必要とすると思いますが、私はSQLiteを初めて使用していて、その動作を実際に理解していません。どんな助けと説明も徹底的に評価されます。

+0

あなたは(af.actor)をCOUNTするCOUNT(af.film)を変更することができます –

+0

妙に同じ結果を与えます。 .. – willay

答えて

0

actor_filmactorの列を使用しているのは、基本的にはどの映画でカウントしたいのですか。次のステップはJOINになり、その結果はactor_filmになるので、その映画に関連するすべてのactor_filmレコードを取得できます。

私は次のようにあなたが探して何をすべきと考えている。

SELECT f.id, f.name, COUNT(af_2.actor) AS actor_count 
FROM actor_film af 
JOIN actor_film af_2 ON 
    af_2.film = af.film 
JOIN film f ON 
    f.id = af.film 
WHERE af.actor = "/m/0f502" 
GROUP BY af.film; 
2

頭に浮かん最も簡単なオプションはactor_filmテーブルの上に集約し、二つのことをカウントするようにしました。まず、各映画の俳優の数を数えます。同時に、その映画に関心のある俳優が登場する回数を数えます。私たちが望むアクターが少なくとも1回現れた場合、このサブクエリにはフィルムが保持されます。次に、このサブクエリをfilmテーブルに結合して、映画のIDと名前を入力します。

SELECT f1.id, f1.name, f2.num_actors 
FROM film f1 
INNER JOIN 
(
    SELECT film, COUNT(*) AS num_actors 
    FROM actor_film 
    GROUP BY film 
    HAVING SUM(CASE WHEN actor = "/m/0f502" THEN 1 ELSE 0 END) > 0 
) f2 
    ON f1.id = f2.film 
+0

俳優数が正しい間に、これは俳優がいなかった映画を作ります。 – willay

+0

@ウィル私はあなたのデータが何か問題を抱えていると思います。 –

+0

@willay申し訳ありませんが、私は 'SUM'の代わりに' COUNT'を持っていました。 –

0

これは、つまり、ネストされたSELECT文で、確か(correlated)subqueries可能です:

SELECT id, 
     name, 
     (SELECT count(*) 
     FROM actor_film 
     WHERE film = films.id 
     ) AS actors 
FROM films 
WHERE id IN (SELECT film 
      FROM actor_film 
      WHERE actor = '/m/0f502'); 
関連する問題