2009-05-27 5 views
0

Ich habe folgende Tabellen.Wie abzufragen, ohne den ursprünglichen Namen der Tabelle zu definieren?

genre: 
    genre_id 
    name 

actors: 
    actor_id 
    name 

movies: 
    movie_id 
    actor_id 
    genre_id 
    title 

Ich habe folgende Abfrage die Schauspieler alle mit genre_id auszuwählen 3.

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

ist es möglich, eine Abfrage ohne „-Filme als m“ zu machen, da ich m.genre_id nicht brauchen. Ich möchte nur den Namen des Schauspielers anzeigen.

Antwort

4

haben, um Filme zu verbinden, wenn die genre_id die einzige Info, die Sie haben ....

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 hat, aber als Alternative:

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

Wo (1 existiert wählen Sie aus ... würde auch funktionieren - und möglicherweise schneller sein, weil Sie das "in" – Kieveli

+0

nicht ausführen Sie haben Recht, das würde auch funktionieren. Jedoch bin ich nicht sicher über Leistungsunterschiede. Haben Sie irgendwelche Informationen, die das unterstützen? Ich würde Ich liebe es, das herauszufinden – northpole

+0

Ich habe gerade mit meinem DBA gesprochen und er sagte das allgemein Wenn die Unterabfrage mehr als eine Zeile zurückgibt (großer Datensatz), ist EXISTS fast immer schneller. Wenn Sie eine (oder sehr wenige) Zeile in der Unterabfrage zurückgeben, dann ist IN der richtige Weg .... schön, fangen Sie Kieveli – northpole

Verwandte Themen