MySql: Selbe query funktioniert nicht auf pc, aber auf server
Timon
- datenbank
0 Vinzenz Mai0 Timon
0 Ilja
Einen schönen guten Abend,
ich habe folgendes Problem:
Die query
SELECT f.*, z.u_name
FROM i_frage AS f, i_user as z
LEFT JOIN i_u_f AS u ON f.f_id = u.f_id
AND u.u_id = '1'
WHERE u.f_id IS NULL
AND f.u_id = z.u_id
läuft auf 2 Servern (funpic Server mit mysql 4.1.22 und goneo server mit mysql 5.0.37), jedoch nicht auf meinem lokalen server (mysql 5.0.45)
es kommt der Fehler:
Unknown column 'f.f_id' in 'on clause'
die tabellen (alle MyISAM):
i_frage(
f_id integer not null auto_increment,
u_id int(15),
k_id int(15),
f_titel char(250),
f_frage blob,
f_antwort blob,
...
primary key(f_id)
);
i_user(
u_id integer not null auto_increment,
u_name char(100),
u_pass char(50),
u_mail char(250),
u_admin int(1),
...
primary key(u_id)
);
i_u_f(
u_id int(15),
f_id int(15),
u_f_fach int(2),
primary key(u_id, f_id)
)
Kann mir bitte jemand weiterhelfen?
Timon @ http://www.wahnsinn.de.tl | http://www.timonpeters.de
Hallo
Die query
SELECT f.*, z.u_name
FROM i_frage AS f, i_user as z
LEFT JOIN i_u_f AS u ON f.f_id = u.f_id
AND u.u_id = '1'
WHERE u.f_id IS NULL
AND f.u_id = z.u_id
Schlampiges SQL (das nur alte MySQL-Versionen akzeptieren) mit verwirrenden
Aliasnamen. Ich finde es gut, dass MySQL inzwischen mehr auf Standards achtet
und schlampige Statements mit Fehlermeldungen bestraft.
Früher hat MySQL einfach falsche Ergebnisse geliefert, das war viel schlimmer.
> läuft auf 2 Servern (funpic Server mit mysql 4.1.22
Das ist klar.
> und goneo server mit mysql 5.0.37),
Das wundert mich.
> jedoch nicht auf meinem lokalen server (mysql 5.0.45)
Das ist zu erwarten - seit MySQL 5.0.12.
> Unknown column 'f.f\_id' in 'on clause'
Erwartungsgemäß: so ist es im [Handbuch](http://dev.mysql.com/doc/refman/5.0/en/join.html) beschrieben.
Tipp:
Lies insbesondere die Bereiche, die sich mit Deiner Fehlermeldung beschäftigen.
Freundliche Grüße
Vinzenz
Erstmal danke.
Schlampiges SQL (das nur alte MySQL-Versionen akzeptieren) mit verwirrenden
Aliasnamen. Ich finde es gut, dass MySQL inzwischen mehr auf Standards achtet
und schlampige Statements mit Fehlermeldungen bestraft.Früher hat MySQL einfach falsche Ergebnisse geliefert, das war viel schlimmer.
Das Script lieferte mir vor 1/2 Jahr dieses Forum. Ich hätte doch besser selbst nachlesen sollen. Bisher hat es immer funktioniert, deshalb habe ich nicht nachgelesen.
Tipp:
Lies insbesondere die Bereiche, die sich mit Deiner Fehlermeldung beschäftigen.
Mein Gott ist das viel... Ja mache ich.
Freundliche Grüße
Vinzenz
Freundliche Grüße
Timon @ http://www.wahnsinn.de.tl | http://www.timonpeters.de
Hallo
Schlampiges SQL (das nur alte MySQL-Versionen akzeptieren) mit verwirrenden
Aliasnamen. Ich finde es gut, dass MySQL inzwischen mehr auf Standards achtet
und schlampige Statements mit Fehlermeldungen bestraft.Früher hat MySQL einfach falsche Ergebnisse geliefert, das war viel schlimmer.
Das Script lieferte mir vor 1/2 Jahr dieses Forum. Ich hätte doch besser selbst nachlesen sollen. Bisher hat es immer funktioniert, deshalb habe ich nicht nachgelesen.
Hättest Du damals schon auf Axel gehört, der Dir das gleiche empfohlen hat wie jetzt Ilja: Nutze explizite Joinsyntax!
Du hast den impliziten Join schon mitgebracht, ok mit Axels Erweiterung
wurde es falsch :-)
Tipp:
Lies insbesondere die Bereiche, die sich mit Deiner Fehlermeldung beschäftigen.Mein Gott ist das viel... Ja mache ich.
Soviel ist das doch gar nicht, es gibt da so hübsche Abschnitte wie:
<zitat>
Previously, the SELECT was legal due to the implicit grouping of t1,t2 as (t1,t2). Now the JOIN takes precedence, so the operands for the ON clause are t2 and t3. Because t1.i1 is not a column in either of the operands, the result is an Unknown column 't1.i1' in 'on clause' error.
[...]
Alternatively, avoid the use of the comma operator and use JOIN instead:
</zitat>
Nach Axel, Ilja und dem MySQL-Handbuch nun auch noch von mir die Empfehlung:
Nutze explizite Joinsyntax statt impliziten Joins und dem Kommaoperator!
Freundliche Grüße
Vinzenz
yo,
benutze explizite Joins. des weiteren sind deine tabellennamen zum teil nicht sehr geeschickt gewählt.
SELECT f.*, z.u_name
FROM i_frage f
INNER JOIN i_user z ON f.u_id = z.u_id
LEFT JOIN i_u_f u ON f.f_id = u.f_id AND u.u_id = '1'
WHERE u.f_id IS NULL
;
Ilja