Timon: MySql: Selbe query funktioniert nicht auf pc, aber auf server

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

--
Käsebrötchen
  1. 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
    
    1. 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

      --
      Käsebrötchen
      1. 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

  2. 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