select-problem mit 3 Tab
am 01.11.2006 02:46:50 von Charlotte Schweitzer
Hallo,
kann mir mal jemand helfen?
Ich habe drei Tabellen, die so aussehen:
tab0 mit tab0_ID sowie tab1_ID (Haupttab.)
tab1 mit tab1_ID
tab2 mit tab0_ID
wichtig ist, das ich *alle* Datensätze
von tab0 sehe.
Bisher haben aber immer ein paar gefehlt - oder
aber MySQl (3.23 oder so) ist hängen geblieben.
Beste bzw. stabilste Ergebnis habe ich momentan
mit ...
FROM tab0 RIGHT JOIN tab2 ON tab0.tab0_ID = tab2.tab0_ID, tab1
.... erhalten.
aber eben nicht vollständig (da tab1 und tab2 weniger Datensätze
haben).
Abgefragt per string werden sie einzeln oder alle drei zusammen.
Vielen Dank und
Grüße, Charlotte
Re: select-problem mit 3 Tab
am 01.11.2006 07:15:05 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: select-problem mit 3 Tab
am 01.11.2006 09:56:46 von Claus Reibenstein
Charlotte Schweitzer schrieb:
> tab0 mit tab0_ID sowie tab1_ID (Haupttab.)
> tab1 mit tab1_ID
> tab2 mit tab0_ID
>
> wichtig ist, das ich *alle* Datensätze
> von tab0 sehe.
> [...]
> FROM tab0 RIGHT JOIN tab2 ON tab0.tab0_ID = tab2.tab0_ID, tab1
FROM tab0 LEFT JOIN tab2 using (tab0_ID)
LEFT JOIN tab1 using (tab1_ID)
Gruß. Claus
Re: select-problem mit 3 Tab
am 01.11.2006 12:13:13 von Charlotte Schweitzer
Hallo Claus,
>> ...
>> tab0 mit tab0_ID sowie tab1_ID (Haupttab.)
>> tab1 mit tab1_ID
>> tab2 mit tab0_ID
>> ...
> FROM tab0 LEFT JOIN tab2 using (tab0_ID)
> LEFT JOIN tab1 using (tab1_ID)
Danke! Das sieht schick aus.
Der Aufwand, Spalten umzubenennen - sie müßten
bei USING ja gleich heißen - würde sich sicher lohnen
(hängt bischen was dran ...)? (Verknüpfungsspalten
der Basistabellen hatte ich mal anders als die in anderen
Tabs benannt :-())
Ich habe relevante Spalten angeglichen aber Meldungen wie:
Unbekanntes Tabellenfeld 'tab2.tab1_ID' in on clause.
erhalten. Das Feld existiert garnicht! Wie kann das
sein?
Die Feldliste ist auch per Tabellennamen klar definiert ...
FROM tab0 LEFT JOIN tab2 ON tab2.tab0_ID = tab0.tab0_ID
LEFT JOIN tab1 ON tab1.tab1_ID = tab0.tab1_ID
WHERE tab1.strg1 LIKE '$qger%' AND
....
so dauerts wieder zu lange.
Grüße, Charlotte
PS: altes MySql wegen altem Rechner und
bisher ausreichender performance/features ...
why change ...
Re: select-problem mit 3 Tab
am 01.11.2006 14:04:26 von Claus Reibenstein
Charlotte Schweitzer schrieb:
> Hallo Claus,
Du darfst ruhig allen antworten :-)
>> FROM tab0 LEFT JOIN tab2 using (tab0_ID)
>> LEFT JOIN tab1 using (tab1_ID)
>
> Danke! Das sieht schick aus.
Funktioniert aber offenbar nicht ...
> Der Aufwand, Spalten umzubenennen - sie müßten
> bei USING ja gleich heißen - würde sich sicher lohnen
> (hängt bischen was dran ...)? (Verknüpfungsspalten
> der Basistabellen hatte ich mal anders als die in anderen
> Tabs benannt :-())
Zumindest spart es Schreibarbeit. Ob es auch an der Performance etwas
ändert, weiß ich nicht. Vermutlich nicht.
> Ich habe relevante Spalten angeglichen aber Meldungen wie:
> Unbekanntes Tabellenfeld 'tab2.tab1_ID' in on clause.
> erhalten. Das Feld existiert garnicht! Wie kann das
> sein?
Offenbar hat er den zweiten LEFT JOIN auf tab2 statt auf tab0 bezogen.
Vermutlich ein Fehler in meiner Syntax (bin noch nicht 100% JOIN-fest).
> FROM tab0 LEFT JOIN tab2 ON tab2.tab0_ID = tab0.tab0_ID
> LEFT JOIN tab1 ON tab1.tab1_ID = tab0.tab1_ID
Das sollte allerdings funktionieren.
> WHERE tab1.strg1 LIKE '$qger%' AND
> ....
> so dauerts wieder zu lange.
Das liegt vermutlich an dem LIKE, weil er hier nicht auf den Index
zugreifen kann, sondern die Tabelle komplett lesen muss.
> PS: altes MySql wegen altem Rechner und
Wie alt?
Gruß. Claus
Re: select-problem mit 3 Tab
am 01.11.2006 15:36:05 von Charlotte Schweitzer
Hallo ng,
> ...
>>WHERE tab1.strg1 LIKE '$qger%' AND
>>....
>>so dauerts wieder zu lange.
auch wenn ich das WHERE rausnehme, dauerts:
Nach MySqlAdmin , in der Prozessliste, scheint
"er" sich hauptsächlich mit dem Kopieren in
einen tmp-table zu beschäftigen.
>
>
> Das liegt vermutlich an dem LIKE, weil er hier nicht auf den Index
> zugreifen kann, sondern die Tabelle komplett lesen muss.
mmh - kompliziert wirds da.
Vielleicht sollte ich dann die query stückeln ...
>
>
>>PS: altes MySql wegen altem Rechner und
>
>
> Wie alt?
PII 266
Grüße, Charlotte
Re: select-problem mit 3 Tab
am 01.11.2006 16:24:42 von Claus Reibenstein
Charlotte Schweitzer schrieb:
> auch wenn ich das WHERE rausnehme, dauerts:
> Nach MySqlAdmin , in der Prozessliste, scheint
> "er" sich hauptsächlich mit dem Kopieren in
> einen tmp-table zu beschäftigen.
Vielleicht liegt's ja an der alten MySQL-Version :-)
>>> PS: altes MySql wegen altem Rechner und
>>
>> Wie alt?
>
> PII 266
Gut, das erklärt natürlich einiges. Bei der Maschine kann man nicht viel
Performance erwarten.
Aber eigentlich meinte ich das Alter von MySQL :-)
Gruß. Claus
Re: select-problem mit 3 Tab
am 01.11.2006 18:30:21 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: select-problem mit 3 Tab
am 01.11.2006 21:04:08 von Charlotte Schweitzer
Hallo
x=29.
Ich habs jetzt mit zwei php-kontrollierten
SELECTs: einem mit einem LEFT JOIN und einem ohne.
Keine Schönheit, auf ein paar Infos muß man bei
Abfrage jew. verzichten, aber es ist schnell, es
funktioniert - soweit.
Danke nochmal, Grüße, Charlotte
Re: select-problem mit 3 Tab
am 04.11.2006 00:28:26 von Thomas Rachel
Charlotte Schweitzer wrote:
> auch wenn ich das WHERE rausnehme, dauerts:
> Nach MySqlAdmin , in der Prozessliste, scheint
> "er" sich hauptsächlich mit dem Kopieren in
> einen tmp-table zu beschäftigen.
Was meint EXPLAIN in den jeweiligen Fällen? Vielleicht fehlt Dir nur
irgendwo ein passender Index...
Thomas
--
Eine Schraube ohne Nagel ist ein Gewinde.