2016-10-26 1 views
0

Ich bin zur Zeit an der Universität und ein Projekt zu tun, wo ich Fragen haben, wie:Effiziente SQL-Abfrage mit mehreren wählt

Select * from recent_purchases where customer_id in 
( select customer_id from 
    customers where name like '%john%' 
) 

Ich bin nicht sicher, ob dies ist der idiomatische Weg, Dinge zu tun, oder wenn Ich vermisse die "richtige" Art, es zu tun - es fühlt sich sicherlich etwas klobig an. Ich verstehe Joins noch nicht wirklich. Entschuldigung, wenn eine dumme Frage.

+2

Wahrscheinlich wollen Sie hier JOIN (um genauer zu sein, eine innere Verknüpfung) https://en.wikipedia.org/wiki/Join_ (SQL) – jarlh

+2

Ich weiß, dass ich viel Feuer in meine Richtung lade, aber ich stimme nicht mit denen überein, die den Benutzer von JOIN vorschlagen. Ihre Anfrage ist OK für dieses spezielle einfache Bedürfnis und, leistungsmäßig, ich denke, wird das beste Ergebnis geben. Sie müssten JOIN für viel komplexere Abfragen in Betracht ziehen, deren Formulierung mit Ihrem einfachen Stil ein Albtraum wäre. Dies ist eine persönliche Meinung, der viele Menschen nicht zustimmen würden. Bis zu Ihnen zu wählen (und zu überprüfen, wenn Sie es wünschen). – FDavidov

+2

AFAIK, mehrere dbms-Produkte optimieren Joins besser als das IN. – jarlh

Antwort

0

Verwenden Sie ein INNER JOIN anstelle eines Sub-Select in der WHERE Klausel:

Select * 
from recent_purchases rp 
inner join customers c on c.customer_id = rp.customer_id 
where c.name like '%john%' 
+0

Ich wusste, dass mir etwas offensichtlich fehlte, danke für die Antwort! Was ist der Vorteil dieser Art gegenüber den beiden Selektionen? – Apoxd

+1

@Apoxd, lesen Sie meinen Kommentar zu Ihrer Frage. – FDavidov

+0

@Apoxd Siehe hierzu: http://StackOverflow.com/Questions/2577174/join-vs-sub-query. Joins sind normalerweise schneller als Subselects. Aber es hängt von Ihrer Verwendung ab – rbr94

Verwandte Themen