2

次の属性を持つ次の4つのテーブルがあります。

Actor:actor_id,firstname,lastname
film_actor:actor_id,film_id
film_category:film_id,category_id
category:category_id,name

映画で働いているすべての俳優のリスト、それらの film_id、category_id、およびカテゴリ名を見つけたいと考えています。

次のクエリに In 句を使用したい。だから私は次のようにこれを実装することでo/pを取得しています:

select  a.first_name,a.actor_id,fc.film_id,c.name,c.category_id
from actor a,film_actor fa,film_category fc,category c where a.actor_id 
in (select fa.film_id from film_actor fa where fa.actor_id=a.actor_id
and fa.film_id 
in (select fc.film_id  from film_category fc where fc.film_id=fa.film_id
and fc.category_id 
in(select fc.category_id from category c where c.category_id=fc.category_id)))

しかし、今、特定の category_id のアクターのリストを知りたいとします。存在する 5 としましょう。そこで、次の変更を行います。

select  a.first_name,a.actor_id,fc.film_id,c.name,c.category_id
from actor a,film_actor fa,film_category fc,category c 
where a.actor_id in 
(select fa.film_id from film_actor fa where fa.actor_id=a.actor_id
and fa.film_id 
in (select fc.film_id  from film_category fc where fc.film_id=fa.film_id
and fc.category_id 
in(select fc.category_id from category c where c.category_id=fc.category_id
and category_id=5)))

空の結果が得られます。また、最後に IN 句を使用する必要がある場合と使用しない場合はいつですか?

4

2 に答える 2

1

これには使用しないでくださいIN..JOIN代わりに使用してください。

select  
    a.first_name,
    a.actor_id,
    fc.film_id,
    c.name,
    c.category_id
from 
    actor a join 
    film_actor fa on fa.actor_id = a.actor_id join
    film_category fc on fc.film_id = fa.film_id join
    category c on c.category_id = fc.category_id and c.category_id = 5

私は通常IN、ハードコードされた一連の ID にのみ使用します...JOINまたはEXISTS他のすべてのケースに使用します。これはよりクリーンであるだけでなく、実行計画のパフォーマンスも向上する可能性があります。

于 2013-01-10T22:31:21.380 に答える
1

IN句の代わりに結合構文の使用を開始してください。

select a.first_name,
  a.actor_id,
  fc.film_id,
  c.name,
  c.category_id
from actor a
left join film_actor fa
  on a.actor_id = fa.actor_id
left join film_category fc
  fa.film_id = fc.film_id
left join category c 
  on fc.category_id = c.category_id
  and c.category_id=5

actorこれにより、他のテーブルに一致するレコードがあるかどうかに関係なく、テーブルからすべてのレコードが返されます。

JOIN構文を学習するのに助けが必要な場合は、ここに結合の優れた視覚的な説明があります

于 2013-01-10T22:31:41.700 に答える