2016-09-24 8 views
0

30以上の映画に参加した俳優の名前をすべて検索する必要があります。これはあまりそれをやっていません。私はここで間違って何をしていますか?関与30以上の映画の俳優を取得するSQLサブクエリ

SELECT first_name, last_name 
FROM actor A 
WHERE 30 > (SELECT COUNT(actor_id) FROM film_actor); 

テーブル:

  • 俳優: ACTOR_ID FIRST_NAME LAST_NAME LAST_UPDATE
  • フィルム: film_idタイトル説明RELEASE_YEAR LANGUAGE_ID original_language_id rental_duration rental_rate長replacement_cost格付けspecial_features
  • film_actorをLAST_UPDATE: actor_ idはLAST_UPDATE film_id
+0

サブクエリは、あなたが扱っている俳優に関係なく、film_actorのすべての行を数えます。私の提案は、後方に働くことです - film_actorで始める - GROUP BY、HAVING、INNER JOINを使って、あなたが望む俳優を得るために戻ってください。 – MageeWorld

答えて

4

はこれを試してください:あなたの現在のクエリの

SELECT  a.first_name, a.last_name 
FROM  actor  a 
INNER JOIN film_actor fa ON a.actor_id = fa.actor_id 
GROUP BY a.actor_id, a.first_name, a.last_name 
HAVING  COUNT(fa.film_id) > 30 
+0

ああ、それは理にかなっています - 上に戻るという私のコメントを書いていたときにそれを見ることができませんでした – MageeWorld

1

行動の説明は

あなたの現在のクエリはactorfilm_actorテーブル間の任意の接続なしで動作しますので、結果が奇数になります実際にすべての俳優を表示するactorテーブルから行全体の場合film_actor null以外の値actor_idを持つテーブルには、タスクグループと

使用INNER JOINと、少なくとも30本の映画に参加した唯一のショーの役者に句を持つため30未満


正しいアプローチです。

あなたのテーブルでactor_id, film_idのペアfilm_actorは、このクエリは十分で一意である場合:

SELECT a.actor_id,a.first_name, a.last_name 
FROM actor a 
INNER JOIN film_actor fa ON 
    a.actor_id = fa.actor_id 
GROUP BY a.actor_id, a.first_name, a.last_name 
HAVING COUNT(fa.film_id) > 30 

ペアが述べたように、しかし、あなたはいくつかの役割に俳優を格納している場合、1つのムービーにプレイできます私は2人の俳優が同じ姓と名を持つことができ、あなたがprobabたいので、WHERE句で選択し、グループにactor_idを追加しました

HAVING COUNT(DISTINCT fa.film_id) > 30 

注:以前の一意でない場合、having句に個別の追加それらのケースをはっきりと見たいと思っています。

1

使用は、代わりにこの

SELECT first_name, last_name 
FROM actor a 
JOIN actor_film af 
ON(a.actor_id = af.actor_id) 
WHERE (SELECT count(af.film_id) FROM af) > 30 
0

を試してみてください。これは、我々は共通の列を持っている場合、それが唯一のGROUP BYおよびなどの集計機能付きの残りの部分を使用することをお勧めだろう、また良い代替であるクエリに参加しました

SELECT 
    MAX(a.first_name) AS first_name, 
    MAX(a.last_name) AS last_name 
FROM actor a 
INNER JOIN film_actor fa ON a.actor_id = fa.actor_id 
GROUP BY a.actor_id 
HAVING COUNT(fa.film_id) > 30 
関連する問題