Erst eine Selektion, dann ein Join
Erst eine Selektion, dann ein Join
am 26.01.2007 21:41:01 von JRRT0lkien
Hallo,
ich würde gerne etwas aus einer Tabelle selektieren und das Ergebnis
mit einer anderen Tabelle joinen. Wie kann ich das aber in MySQL
machen? Ich möchte gerne mit MySQL-code arbeiten, und nicht etwa den
Rückgabewert von mysql_query in PHP zwischenspeichern müssen. Ist das
möglich? Gibt es so etwas vie Variablen in MySQL, oder hat es kein
Gedächtnis?
Gruß
Alexander
Re: Erst eine Selektion, dann ein Join
am 27.01.2007 10:37:18 von Andreas Kretschmer
Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Re: Erst eine Selektion, dann ein Join
am 27.01.2007 10:53:18 von JRRT0lkien
> select a.col1, a.col2, b.col3 from tab1 a join tab2 b on a.pk=3Db.fk wher=
e a.col3=3Dfoo;
>
> Viel mehr kann man bei Deiner vagen Problembeschreibung nicht sagen.
Diese Zeile verstehe ich, und so hätte ich es auch geschrieben. Nur
waren meine Bedenken, dass dann *erst* der Join und *dann* die
Selektion durchgeführt würde. Andersrum wäre es effizienter. Aber
wenn ich dich richtig verstehe, brauche ich mir darüber keine Sorgen
zu machen?
Gruß
JRRT0lkien
Re: Erst eine Selektion, dann ein Join
am 27.01.2007 11:17:31 von Thomas Rachel
Alexander Erlich wrote:
>
>> select a.col1, a.col2, b.col3 from tab1 a join tab2 b on a.pk=b.fk
>> where a.col3=foo;
>>
>> Viel mehr kann man bei Deiner vagen Problembeschreibung nicht sagen.
>
> Diese Zeile verstehe ich, und so hätte ich es auch geschrieben. Nur
> waren meine Bedenken, dass dann *erst* der Join und *dann* die
> Selektion durchgeführt würde. Andersrum wäre es effizienter. Aber
> wenn ich dich richtig verstehe, brauche ich mir darüber keine Sorgen
> zu machen?
Richtig. Das ist allerdings abhängig von dem Verhältnis der
rausgeworfenen zu gesamten Zeilen.
Wenn durch die WHERE-Bedingung nur eine Hand voll Zeilen herausgeworfen
würden, wird unter Umständen in einer anderen Reihenfolge verknüpft als
wenn nur eine Handvoll übrig bleibt.
Aber warum verwendest Du nicht EXPLAIN, um Dir das im konkreten Fall
anzeigen zu lassen? Dort wird genau angezeigt, welche Tabellen in
welcher Reihenfolge betrachtet werden. Einfach EXPLAIN vor den
SELECT-Befehl tackern und das Ergebnis anhand der entsprechenden
Handbuchseite interpretieren.
Thomas
--
Vorsicht! Das Vorhandensein dieser Signatur berechtigt nicht zu
unüberlegten Handlungen!
Re: Erst eine Selektion, dann ein Join
am 28.01.2007 16:55:21 von Christian Kirsch
Alexander Erlich schrieb:
>> select a.col1, a.col2, b.col3 from tab1 a join tab2 b on a.pk=b.fk where a.col3=foo;
>>
>> Viel mehr kann man bei Deiner vagen Problembeschreibung nicht sagen.
>
> Diese Zeile verstehe ich, und so hätte ich es auch geschrieben. Nur
> waren meine Bedenken, dass dann *erst* der Join und *dann* die
> Selektion durchgeführt würde. Andersrum wäre es effizienter.
Woher weißt *Du*, was die Datenbank effizienter erledigen kann? Ich
jedenfalls würde kein Produkt benutzen, bei dem ich Zweifel hätte, dass
es das, wofür es gebaut wurde, ordentlich erledigt.
> Aber
> wenn ich dich richtig verstehe, brauche ich mir darüber keine Sorgen
> zu machen?
In der Regel nicht. Vorausgesetzt, Du tust das Richtige z.B. bzgl. der
Erstellung von Indizes. Ggfs hilft Dir die Ausgabe von
EXPLAIN SELECT ...
weiter.
Übrigens gibt es zu MySQL ein Handbuch, das solche und ähnliche Fragen
(z.B. die nach "Variablen") beantwortet, online zur Verfügung steht
(dev.mysql.com) und dort durchsuchbar ist. Anderslautenden Gerüchten zum
Trotz beißt es nicht, und seine Lektüre verursacht weder Pickel noch
ansteckende oder entstellende Krankheiten.