Left Join Problem

aKraus

Erfahrenes Mitglied
Hallo,

ich habe ein Problem mit folgenden Select:
Code:
            SELECT p.pic_id,
                   p.pic_path,
                   p.pic_filename,
                   f.picftp_id,
                   f.picftp_hostname,
                   f.picftp_user,
                   f.picftp_password,
                   f.picftp_ftppath,
                   f.picftp_active,
                   f.picftp_cntTrys,
                   p.evt_id
         FROM  picture_ftp f,
                   picture p
  LEFT JOIN  picture_on_ftp o
             ON  p.pic_id    = o.pic_id
            AND  f.picftp_id = o.picftp_id
        WHERE (o.pic_id IS NULL
             OR  o.picftp_id IS NULL)
            AND  f.picftp_active = 1
        LIMIT  1

Alles funktionierte einwandfrei, bis ich von MySQL 4 auf 5 umgestiegen bin.
Als Fehlermeldung erhalte ich immer
Unknown column 'p.pic_id' in 'on clause'
Error Number 1054

Wenn ich jetzt die 2 Zeilen p.pic_id = o.pic_id AND f.picftp_id = o.picftp_id vertausche, bekomme ich den Fehler genau für die andere Abfrage.

Woran kann das liegen?
Wie kann ich diesen Fehler beheben?
 
Hallo,

ich habe das Problem gefunden und will es kurz erläutern:

Selektiert man über mehrere Tabellen, so müssen diese mit Komma aufgelistet werden. Das Komma ist sozusagen ein INNER JOIN. So, seit einer bestimmten SQL Version (5.0.x.x.x. -> kP ;)), müssen jetzt, sofern verschiedene Jointypen verwendet werden (INNER JOIN; OUTER JOIN, LEFT JOIN; RIGHT JOIN, ...) sämtliche Joins explizit angegeben werden. Somit ist folgender Select korrekt:

Code:
            SELECT p.pic_id,
                   p.pic_path,
                   p.pic_filename,
                   f.picftp_id,
                   f.picftp_hostname,
                   f.picftp_user,
                   f.picftp_password,
                   f.picftp_ftppath,
                   f.picftp_active,
                   f.picftp_cntTrys,
                   p.evt_id
             FROM  picture_ftp f
       INNER JOIN  picture p
       
        LEFT JOIN  picture_on_ftp o
               ON  p.pic_id    = o.pic_id
              AND  f.picftp_id = o.picftp_id
        
            WHERE (o.pic_id IS NULL
               OR  o.picftp_id IS NULL)
              AND  f.picftp_active = 1
        LIMIT  1
 
Zurück