Problem mit MySql 5 und left outer join
Thomas
- datenbank
0 Ilja0 Thomas
0 Vinzenz Mai0 Thomas
Ahoihoi
Ich hab da ein Statement, dass in MySql 4.1 läuft und in 5.0.15 nicht mehr.
Folgendes:
select blabla
from tab1, tab2
LEFT OUTER JOIN tab3 kz ON lh_tab3.feldid = tab1.feldid
where tab1.feldid = tab2.feldid
Fehler: 1054 - Unknown column 'tab1.feldid' in 'on clause'
(das feld ist aber vorhanden ;))
lustig ist noch, dass wenn ich beim from tab1 mit tab2 vertausche (from tab2, tab1), dass es dann funzt.
hab ich ein synti-fehler, oder ist das ein bug?
yo,
select blabla
from tab1, tab2
LEFT OUTER JOIN tab3 kz ON lh_tab3.feldid = tab1.feldid
where tab1.feldid = tab2.feldid
der fehler scheint mir bei lh_tab3 zu sein oder ist das ein tippfehler ?
ON lh_tab3.feldid = tab1.feldid
-------
Ilja
der fehler scheint mir bei lh_tab3 zu sein oder ist das ein tippfehler ?
oups ja, war gestern schon etwas müde, sorry ;)
noch ein versuch:
select blabla
from tab1, tab2
LEFT OUTER JOIN tab3 ON tab3.feldid = tab1.feldid
where tab1.feldid = tab2.feldid
Hallo
Ich hab da ein Statement, dass in MySql 4.1 läuft und in 5.0.15 nicht mehr.
Das spricht für MySQL 5 :-)
> select blabla
> from tab1, tab2
> LEFT OUTER JOIN tab3 kz ON lh_tab3.feldid = tab1.feldid
/* auf lh_ hat Ilja Dich bereits aufmerksam gemacht. */
> where tab1.feldid = tab2.feldid
Fehler: 1054 - Unknown column 'tab1.feldid' in 'on clause'
(das feld ist aber vorhanden ;))
Aber nicht in Tabelle tab2!
lustig ist noch, dass wenn ich beim from tab1 mit tab2 vertausche (from tab2, tab1), dass es dann funzt.
Nö, nicht lustig, sondern zu erwarten. Du hast keine Klammern gesetzt, infolgedessen werden die Joins von links nach rechts abgearbeitet, siehe MySQL-Handbuch.
Du hast also einen CROSS JOIN (auch wenn es über die WHERE-Bedingung ein INNER JOIN ist) zwischen tab1 und tab2 und einen LEFT OUTER JOIN zwischen _tab2_ und tab3. Du hast nicht, wie Du erwartest, einen LEFT OUTER JOIN zwischen tab1 und tab3. Deswegen sucht MySQL in Tabelle tab2 das Feld "tab1.feldid" und kann es dort nicht finden. Infolgedessen erhältst Du eine Fehlermeldung.
Da Du eh einen INNER JOIN zwischen tab1 und tab2 hast (wenn auch versteckt), könntest Du Deine Abfrage entsprechend umformulieren:
SELECT
feld1,
feld2,
...
FROM tab2
INNER JOIN tab1 ON tab2.feldid = tab1.feldid
LEFT OUTER JOIN tab3 ON tab1.feldid = tab3.feldid
oder Klammern setzen, um die Joins zu gruppieren.
hab ich ein synti-fehler,
Wenn Du einen Syntaxfehler meinst, lautet die Antwort "Ja".
oder ist das ein bug?
Wenn Du das auf Deine Anwendung beziehst, ist die Antwort: "Ja";
beziehst Du dies MySQL, dann: "Nein".
Freundliche Grüße
Vinzenz
Hi Vinz
where tab1.feldid = tab2.feldid[/code]
Fehler: 1054 - Unknown column 'tab1.feldid' in 'on clause'
(das feld ist aber vorhanden ;))Aber nicht in Tabelle tab2!
Habe die Problematik verstanden, thx.
MySQL 4.1 hat mir aber besser gefallen, wo sich die outer-joins auf alle from-tabellen bezog. ist für mich auch logischer o_O
naja, dann muss ich wohl alle meine selects überarbeiten und ev. auch innerjoins verwenden :(