zwei Tabellen über WHERE abfrage, Problem mit LEFT LOIN
Janez
- datenbank
- sql
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'
Tipp: using(id)
Ansonsten: from tabellenname as aa
oder einfach from tab aa
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.
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.
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.