Bobby: SQL-Statementproblem

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

--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  1. 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

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    1. Hallo

      ... Hochkommatas ...

      Die Mehrzahl der Mehrzahl von Hochkomma? ;-)

      Tschö, Auge

      --
      Die deutschen Interessen werden am Liechtenstein verteidigt.
      Veranstaltungsdatenbank Vdb 0.2
      1. 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

        --
        -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
        -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
        ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
        1. 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";

  2. 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 JOIN Anbieter-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
    
    1. 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

      --
      -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
      -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
      ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
      1. 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";