Janez: zwei Tabellen über WHERE abfrage, Problem mit LEFT LOIN

Hallo in die Runde!

ich habe ein Problem beim Abrufen meiner Daten. Denn ich bekomme folgende Fehlermeldung.

#1054 - Unbekanntes Tabellenfeld 'aa.id' in on clause

Wenn ich es ohne LEFT JOIN ausführe geht es. Wenn ich es ohne zweite Tabelle, adresse xx ausführe geht es.

ich denke es hat etwas mit der zweiten Tabelle zu tun, aber ich finde nichts über ein Verbot

SELECT a.id, a.name, b.ort, aa.info FROM daten a, adresse xx
LEFT JOIN informationen aa	ON aa.id =a.id 

WHERE  a.aktiv=0 AND b.ort LIKE '%islava'
  1. Tipp: using(id)

    Ansonsten: from tabellenname as aa oder einfach from tab aa

  2. Tach!

    #1054 - Unbekanntes Tabellenfeld 'aa.id' in on clause

    ich denke es hat etwas mit der zweiten Tabelle zu tun, aber ich finde nichts über ein Verbot

    Verbot? Da steht unbekannt, nicht verboten. Du hast da wohl ein Feld angegeben, das nicht existiert.

    dedlfix.

    1. Ich habe es jetzt nochmal alles nachvollzogen.

      select 
      a.id, 
      b.ort
      from 
      all a, 
      adress b 
      WHERE 
      a.aktiv=0 
      AND 
      a.id=b.id
      

      so geht es!

      select 
      a.id, 
      b.ort,
      aa.inhalt  <----NEU
      from 
      all a, 
      adress b 
      LEFT JOIN an_daten aa ON aa.id=a.id AND aa.typ=1   <----NEU
      WHERE 
      a.aktiv=0 
      AND 
      a.id=b.id
      

      so kommt die Fehlermeldung

      #1054 - Unbekanntes Tabellenfeld 'a.id' in on clause

      Aber sie ist doch da. Sie geht im ersten Beispiel doch und im Zweiten wurde an dieser nichts geändert, also muss der Fehler doch irgendwie da sein, wie ich sie anspreche.

      1. Tach!

        Vorab ein Hinweis: Bitte kennzeichne hier im Forum Code mit der richtigen Sprache. SQL ist weder HTML noch PHP (ich hab das mal korrigiert). SQL wird zwar nicht angeboten in der Auswahlliste, ist aber trotzdem vorhanden und lässt sich händisch angeben. Im Zweifelsfall lieber keine Sprache als eine verkehrte angeben.

        select 
        a.id, 
        b.ort,
        aa.inhalt  <----NEU
        from 
        all a, 
        adress b 
        LEFT JOIN an_daten aa ON aa.id=a.id AND aa.typ=1   <----NEU
        WHERE 
        a.aktiv=0 
        AND 
        a.id=b.id
        

        Ich hab mal für dich im Internet gesucht, und beispielsweise das gefunden.

        #1054 - Unbekanntes Tabellenfeld 'a.id' in on clause

        Zu dieser Meldung kommen Antworten, dass die Ursache das Mischen von Join-Syntax ist. Du hast zuerst ein Komma zwischen Tabellennamen und die Join-Bedingung im WHERE stehen, ein so genannter impliziter Join. Danach steht ein expliziter Join. Nun ist es so, dass der explizite Join Priorität hat und somit Tabelle a aus dem anderen Join (noch) nicht bekannt ist. Die Alternativen sind, die erste Auflistung der Tabellen zu klammern, oder - was besser ist - die Syntaxarten nicht zu vermischen. Beim expliziten Join hat man auch den Vorteil, dass die Bedingungen direkt neben der Join-Syntax stehen und nicht irgendwann später in der WHERE-Klausel.

        SELECT a.id, b.ort, aa.inhalt
        FROM all a
        INNER JOIN adress b ON a.id = b.id
        LEFT JOIN an_daten aa ON aa.id = a.id AND aa.typ = 1
        WHERE a.aktiv = 0
        

        dedlfix.