SQL-Statementproblem
Bobby
- datenbank
Moin
Ich mal wieder ein SQL-Statement Problem.
Ich habe 2 Tabellen:
Tabellenstruktur:
Anbieter mit 3 Spalten
Anbieter_ID, Name, Hauptsitz
Anbieter-Rolle
Anbieter_ID, Rolle_ID
So ich möchte nun die Werte aus Anbieter_Rolle per Left Join
In etwa, das rauskommt: Anbieter_ID:1
Name:Name
Hauptsitz:Hauptsitz
AnbieterrolleID:1
So, nun habe ich folgendes probiert:
SELECT Anbieter.Anbieter_ID, Anbieter.Name, Anbieter.Hauptsitz, `Anbieter-Rolle.Anbieter_ID`
FROM Anbieter
LEFT JOIN `Anbieter-Rolle` ON ( `Anbieter-Rolle.Anbieter_ID` = Anbieter.Anbieter_ID )
LIMIT 0 , 30
Da bekomm ich die Meldung: Unknown column 'Anbieter-Rolle.Anbieter_ID' in 'field list'
Warum? Ich verstehs nicht. Leider. Wer kann mir auf die Sprünge helfen?
Gruß Bobby
Moin
Aha, Ich habe herausgefunden, das es an den Hochkommatas liegt.
Aber Anbieter-Rolle.Anbieter_ID ohne Hochkommas ist nicht konform.
Wie kann ich diese Tabellenzelle ansprechen?
Anbieter-Rolle.Anbieter\_ID
Gruß Bobby
Hallo
... Hochkommatas ...
Die Mehrzahl der Mehrzahl von Hochkomma? ;-)
Tschö, Auge
Moin
... Hochkommatas ...
Die Mehrzahl der Mehrzahl von Hochkomma? ;-)
Du kannst vor deinem geistigen Auge gern das letzte "s" oder den Teilstring "ta" streichen. Das sei dir erlaubt.
Ums gescheiter und für dich verständlich auszudrücken:
ereg_replace("ta","","Hochkommatas");
grins... :-D
Gruß Bobby
echo $begrüßung;
Ums gescheiter und für dich verständlich auszudrücken:
ereg_replace("ta","","Hochkommatas");
Wohl eher "gescheitert". Für String-Spatzen braucht man keine RegExp-Kanone.
echo "$verabschiedung $name";
Hallo,
Anbieter-Rolle
ein schlechter Tabellenname, das Minuszeichen solltest Du in Namen vermeiden.
Anbieter_ID, Rolle_ID
SELECT Anbieter.Anbieter_ID, Anbieter.Name, Anbieter.Hauptsitz,
Anbieter-Rolle.Anbieter_ID
FROM Anbieter
LEFT JOINAnbieter-Rolle
ON (Anbieter-Rolle.Anbieter_ID
= Anbieter.Anbieter_ID )
Die Backticks sagen mir, dass es sich um MySQL handelt.
> Da bekomm ich die Meldung: Unknown column 'Anbieter-Rolle.Anbieter\_ID' in 'field list'
Weil Du in der ON-Klausel den zweiten Backtick falsch gesetzt hast. Verwende doch insbesondere für Namen, die Du quoten musst, Aliasnamen, die Du nicht zu quoten brauchst.
Freundliche Grüße
Vinzenz
Moin
Danke für deine Hinweise. Ja, es handelt sich um MySQL.
Musste diese Tabellenstruktur vom Kunden übernehmen und darf diese nicht ändern. Ich habe nun Zugriff über:
Anbieter-Rolle
.Anbieter_ID
Das funktioniert ganz gut. Mit Aliasen bin ich vorsichtig geworden, da es mir schon passiert ist, das ein Alias innerhalb einer starken Verschachtelung nicht mehr bekannt war. Deshalb versuche ich immer direkt mit Tabellennamen und Spaltennamen auf die einzelnen Felder zuzugreifen.
Dennoch Danke, Wie gesagt, das obere funktioniert
Gruß Bobby
echo $begrüßung;
Anbieter-Rolle
.Anbieter_ID
Wenn du einen Identifier in einrahmst, dann werden alle Zeichen darin als Bestandteil des Identifiers gewertet. Das gilt auch für Punkte. Wenn du zwei Identifier hast, die mit Punkt getrennt werden müssen, und du machst nur ein
-Paar drumrum, was passiert dann wohl mit dem Punkt?
Mit Aliasen bin ich vorsichtig geworden, da es mir schon passiert ist, das ein Alias innerhalb einer starken Verschachtelung nicht mehr bekannt war.
Die einzige Vorsicht muss man nur bei der eindeutigen Benennung walten lassen. Der Rest ist eigentlich nur Wissen, wann welche Klausel ausgewertet wird und welche Daten dazu schon zur Verfügung stehen und welche nicht. Alias-Namen in der SELECT-Klausel beispielsweise stehen im WHERE nicht zur Verfügung, weil zuerst die Datensätze ermitteln werden müssen, bevor man die Ergebnisspalten berechnen kann. Im ORDER BY hingegen kann man sich auf SELECT-Aliasse beziehen. Im WHERE stehen aber die FROM/JOIN-Aliasse zur Verfügung, denn die beteiligten Tabellen sind ja schon bekannt, wenn das Einschränken ihres Inhalts an die Reihe kommt. Die Reihenfolge der Abarbeitung entspricht im Prinzip der Notationsreihenfolge, mit Ausnahme der Spaltenauswertung, welche zwischen GROUP BY und HAVING erfolgt.
echo "$verabschiedung $name";