2009-05-27 12 views
0

私は以下の表を持っています。私はm.genre_idを必要としないので、テーブルの初期名を定義せずにクエリを実行する方法は?

genre: 
    genre_id 
    name 

actors: 
    actor_id 
    name 

movies: 
    movie_id 
    actor_id 
    genre_id 
    title 

私はgenre_id 3.

select a.name, m.genre_id from 
actors as a 
, movies as m 
where 
m.genre_id = 3; 

持つすべての俳優を選択するには、クエリを次しているが、「Mとして映画」なくてクエリを作成することが可能です。私は俳優の名前を表示したいだけです。

答えて

4

select a.name 
from actors as a 
inner join movies as m on a.actor_id = m.actor_id 
where m.genre_id = 3; 
2

CSharpAtlはそれを持っている.... genre_idはあなたが持っている唯一の情報であれば映画に参加する必要がありますが、代替として:

select a.name 
    from actors a 
    where actor_id in (select m.actor_id 
         from movies m 
         where a.actor_id = m.actor_id 
          and genre_id = 3) 
+1

存在する(から1を選択します...でもうまくいくでしょうし、おそらくは 'in'を実行しないために速くなるでしょう – Kieveli

+0

あなたも正しいでしょうが、パフォーマンスの違いについてはわかりません。 – northpole

+0

私はDBAに話しただけで、彼は一般言い換えれば、サブクエリが複数の行(大きなデータセット)を返す場合、EXISTSはほぼ常に高速です。あなたがサブクエリで1つ(またはごくわずか)の行を返す場合は、INが行く方法です.... nice catch Kieveli – northpole

関連する問題