Rainer: 2 Joins in einer Query (MySQL)

Hallo,

@MySQL 5.xx

--folgendes Query steht im PHPScript und funktioniert:

$sql = 'SELECT '.TBL_AUFTRAEGE.'.ID, KundenID, Datum, Wert,
Vorname, Name, Firmenbezeichnung, Strasse, PLZ, Ort, Telefon,
Liefersperre, '.TBL_ADDRESSES.'.Info

FROM '.TBL_AUFTRAEGE.'

JOIN '.TBL_ADDRESSES.' ON '.TBL_AUFTRAEGE.'.KundenID='.TBL_ADDRESSES.'.ID

WHERE ProjektID='.$pid;

--nun möchte ich noch aus einer weiteren Tabelle Name und Vorname des Ansprechpartners einlesen und dachte mir - ok Felder

im Select anhängen, noch ein Join und fertig:

$sql = 'SELECT '.TBL_AUFTRAEGE.'.ID, KundenID, Datum, Wert,
Vorname, Name, Firmenbezeichnung, Strasse, PLZ, Ort, Telefon,
Liefersperre, '.TBL_ADDRESSES.'.Info

,'.TBL_ANSPRECHPARTNER.'.APVorname, '.TBL_ANSPRECHPARTNER.'.APName

FROM '.TBL_AUFTRAEGE.'
JOIN '.TBL_ADDRESSES.' ON '.TBL_AUFTRAEGE.'.KundenID='.TBL_ADDRESSES.'.ID

JOIN '.TBL_ANSPRECHPARTNER.' ON '.TBL_AUFTRAEGE.'.KundenID='.TBL_ANSPRECHPARTNER.'.KundenID

WHERE ProjektID='.$pid;

--Denkste, geht nicht..

Fehlermeldung:

"Column 'KundenID' in field list is ambiguous" - wieso mehrdeutig? Finde den Haken nicht.
Kann mir das jemand erklären.

Gruß Rainer

  1. Hi,

    "Column 'KundenID' in field list is ambiguous" - wieso mehrdeutig? Finde den Haken nicht.
    Kann mir das jemand erklären.

    $sql = 'SELECT '.TBL_AUFTRAEGE.'.ID, KundenID, Datum, Wert,
    ...
    TBL_AUFTRAEGE.'.KundenID
    TBL_ANSPRECHPARTNER.'.KundenID

    Seltsam. Bei ID weißt Du, wie Du Mehrdeutigkeit auflösen kannst, bei KundenID aber nicht ...

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Hallo Andreas,

      leider weiss ich es überhaupt nicht. Die Query steht so im Script. Habe die Stelle gefunden wo ich etwas erweitern muss (?) um das Ergebnis zu erweitern.

      Kannst du mir sagen wie es richtig geschrieben sein muss?
      Ist das von Axel richtig?

      Rainer

      1. Hallo,

        Kannst du mir sagen wie es richtig geschrieben sein muss?
        Ist das von Axel richtig?

        ja, ist es. Siehe dazu zum Beispiel http://aktuell.de.selfhtml.org/artikel/datenbanken/fortgeschrittene-joins/selfjoin.htm.

        Weiter solltest Du Zahlen, die aus Variablen stammen, in zusammengebauten SQL-Statements besondere Aufmerksamkeit schenken, siehe dedlfix Ausführungen in der Preview-Version seines Artikels, der Abschnitt mit der Überschrift "Zahlen im (My)SQL-Statement".

        Freundliche Grüße

        Vinzenz

  2. Hallo,

    --folgendes Query steht im PHPScript und funktioniert:

    Bitte gib demnächst bei SQL-Fragen den Query, also den _Inhalt_ von $sql an und _nicht_ den PHP-Code.

    --nun möchte ich noch aus einer weiteren Tabelle Name und Vorname des Ansprechpartners einlesen und dachte mir - ok Felder

    im Select anhängen, noch ein Join und fertig:

    $sql = 'SELECT '.TBL_AUFTRAEGE.'.ID, KundenID, Datum, Wert,
    Vorname, Name, Firmenbezeichnung, Strasse, PLZ, Ort, Telefon,
    Liefersperre, '.TBL_ADDRESSES.'.Info

    ,'.TBL_ANSPRECHPARTNER.'.APVorname, '.TBL_ANSPRECHPARTNER.'.APName

    FROM '.TBL_AUFTRAEGE.'
    JOIN '.TBL_ADDRESSES.' ON '.TBL_AUFTRAEGE.'.KundenID='.TBL_ADDRESSES.'.ID

    JOIN '.TBL_ANSPRECHPARTNER.' ON '.TBL_AUFTRAEGE.'.KundenID='.TBL_ANSPRECHPARTNER.'.KundenID

    WHERE ProjektID='.$pid;

    Hm. Sind TBL_AUFTRAEGE, TBL_ADDRESSES, TBL_ANSPRECHPARTNER Konstanten?

      
    SELECT TBL_AUFTRAEGE.ID, KundenID, Datum, Wert,  
    Vorname, Name, Firmenbezeichnung, Strasse, PLZ, Ort, Telefon,  
    Liefersperre, TBL_ADDRESSES.Info, TBL_ANSPRECHPARTNER.APVorname, TBL_ANSPRECHPARTNER.APName  
    			  
    FROM TBL_AUFTRAEGE.  
    INNER JOIN TBL_ADDRESSES ON TBL_AUFTRAEGE.KundenID=TBL_ADDRESSES.ID  
    INNER JOIN TBL_ANSPRECHPARTNER ON TBL_AUFTRAEGE.KundenID=TBL_ANSPRECHPARTNER.KundenID  
      
    WHERE ProjektID=1;  
    
    

    Das Feld KundenID kommt sowohl in der Tabelle TBL_AUFTRAEGE also auch in der Tabelle TBL_ANSPRECHPARTNER vor. Welche KundenID soll das SELECT also abfragen?

    viele Grüße

    Axel

  3. Hallo Rainer dein SQL ist ja FAST richtig

    $sql = 'SELECT '.TBL_AUFTRAEGE.'.ID, KundenID, Datum, Wert,
    Vorname, Name, Firmenbezeichnung, Strasse, PLZ, Ort, Telefon,
    Liefersperre, '.TBL_ADDRESSES.'.Info

    ,'.TBL_ANSPRECHPARTNER.'.APVorname, '.TBL_ANSPRECHPARTNER.'.APName

    FROM '.TBL_AUFTRAEGE.'
    JOIN '.TBL_ADDRESSES.' ON '.TBL_AUFTRAEGE.'.KundenID='.TBL_ADDRESSES.'.ID

    JOIN '.TBL_ANSPRECHPARTNER.' ON '.TBL_AUFTRAEGE.'.KundenID='.TBL_ANSPRECHPARTNER.'.KundenID

    WHERE ProjektID='.$pid;

    dein zusatz von TBL_AUFTRAEGE.'.KundenID='.TBL_ANSPRECHPARTNER.'.KundenID ist ja ganz nett nur solltest du im select ihm auch sagen "Welche" KundenID

    $sql = 'SELECT '.TBL_AUFTRAEGE.'.ID, '.TBL_ANSPRECHPARTNER.'.KundenID, Datum, Wert,
    Vorname, Name, Firmenbezeichnung, Strasse, PLZ, Ort, Telefon,
    Liefersperre, '.TBL_ADDRESSES.'.Info

    ,'.TBL_ANSPRECHPARTNER.'.APVorname, '.TBL_ANSPRECHPARTNER.'.APName

    FROM '.TBL_AUFTRAEGE.'
    JOIN '.TBL_ADDRESSES.' ON '.TBL_AUFTRAEGE.'.KundenID='.TBL_ADDRESSES.'.ID

    JOIN '.TBL_ANSPRECHPARTNER.' ON '.TBL_AUFTRAEGE.'.KundenID='.TBL_ANSPRECHPARTNER.'.KundenID

    WHERE ProjektID='.$pid;

    Ich hoffe mal so kommts hin, kann ich nicht testen da ich weder DB noch php code dazu hab.die im SELECT stehenden felder würde ich alle prefixen mit tabellen namen .. so btw.

    Gruß Jan

    --------------

    IT & PR - zinsnavigator.de
    janfeddersen _at_ dunkelnetz _dot_ de
    Kredit Umschulden ? Wir helfen !