(für mich) komplizierte SQL Abfrage [solved]



  • http://img138.imageshack.us/img138/1644/19731068.png
    hier seht ihr meine kleine datenbank

    mein ziel ist eine Teilnehmer liste auszugeben mit folgenden spalten:
    - Teilnehmer Vorname
    - Teilnehmer Nachname
    - Teilnehmer Rechnungsempfänger Vorname
    - Teilnehmer Rechnungsempfänger Nachname

    da die Teilnehmerperson und Rechnungsempfängerperson aus der Personen Relation stammen weis ich nicht wie ich das in EINER zeile SQL umsetzen kann (wäre wünschenswert da dann das programm das darauf zugreift einfacher bleibt)
    ..oder MUSS das durch 2 queries erfolgen 😕 ??

    MfG dom, danke für eure hilfe



  • Schau dir mal diesen Artikel an. Der sollte dir weiterhelfen.

    PS: Deine Website meldet "Database Error: Unable to connect to the database:Could not connect to MySQL" - Zufall?



  • oggs_the_progger schrieb:

    da die Teilnehmerperson und Rechnungsempfängerperson aus der Personen Relation stammen weis ich nicht wie ich das in EINER zeile SQL umsetzen kann (wäre wünschenswert da dann das programm das darauf zugreift einfacher bleibt)
    ..oder MUSS das durch 2 queries erfolgen 😕 ??

    Das geht natürlich in einer einzigen Abfrage wenn du das möchtest, du kannst ja 2x die selbe Tabelle dazujoinen - mit unterschiedlichen Bedingungen im "ON" Teil des Joins.



  • ok danke erstmal 🙂
    ja das ist zufall mit der website^^ funpic WAR mal ein guter hoster 😕



  • SELECT * FROM (SELECT Personen.Vorname,Personen.Nachname FROM (Teilnehmer LEFT JOIN Personen ON (Teilnehmer.Person=Personen.ID))),(SELECT Personen.Vorname,Personen.Nachname FROM Teilnehmer LEFT JOIN (Rechnungsempfaenger LEFT JOIN Personen ON (Personen.ID=Rechnungsempfaenger.ID)) ON (Teilnehmer.Rechnungsempfaenger=Rechnungsempfaenger.ID))

    ich denke ich bewege mich damit schon mal in die richtige richtung x)
    doch folgender fehler tritt bei der ausführung auf:
    java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Cannot repeat table name '%$##@_Alias' in FROM clause.

    is es also unmöglich 2x den gleichen table namen im FROM zu verwenden?



  • au weia was machst du denn da, alles viel zu kompliziert.

    probier das mal so:

    SELECT
    	*
    FROM
    	Teilnehmer AS t
    	LEFT JOIN Rechnungsempfaenger AS r ON r.ID = t.Rechnungsempfaenger
    	LEFT JOIN Personen AS pt ON pt.ID = t.Person
    	LEFT JOIN Personen AS pr ON pr.ID = r.ID
    

    BTW: natürlich kannst du nicht 2x den selben table-namen in einer abfrage verwenden, der server kann ja nicht erraten welchen table du meinst wenn es mehrere mit dem selben namen gibt.
    deswegen gibt es auch die sog. "table-alias", also das was in meinem beispiel "t", "r", "pt" und "pr" sind.

    die wild verschachtelten sub-queries sind übrigens auch vollkommen unnötig.

    und nochwas: dein SQL Statement in einer langen unformatierten wurscht zu schreiben, hilft keinem, und nervt eigentlich nur.



  • schon mal ein dickes THXX 🙂

    funzt aber noch nicht ganz 😕 bekomm ne fehlermeldung
    "Syntax error (missing operator) in query expression 'r.ID = t.Rechnungsempfaenger LEFT JOIN Personen AS pt ON pt.ID = t.Person LEFT JOIN Personen AS pr ON pr.ID = r.ID'."
    versteh nicht was da falsch dran sein soll 😣

    arbeite übrigends unter access... vll liegts daran x)



  • da ich access nie verwende kann ich nur raten
    versuch mal so

    SELECT
        *
    FROM
        Teilnehmer AS t
        LEFT JOIN Rechnungsempfaenger AS r ON (r.ID = t.Rechnungsempfaenger)
        LEFT JOIN Personen AS pt ON (pt.ID = t.Person)
        LEFT JOIN Personen AS pr ON (pr.ID = r.ID)
    

    oder so

    SELECT
        pt.Vorname AS pt_Vorname,
        pt.Nachname AS pt_Nachname,
        r.Zahlungsweise AS r_Zahlungsweise,
        rt.Vorname AS rt_Vorname,
        rt.Nachname AS rt_Nachname
    FROM
        Teilnehmer AS t
        LEFT JOIN Rechnungsempfaenger AS r ON (r.ID = t.Rechnungsempfaenger)
        LEFT JOIN Personen AS pt ON (pt.ID = t.Person)
        LEFT JOIN Personen AS pr ON (pr.ID = r.ID)
    

    oder klick dir die abfrage in access zusammen und guck dir den generierten SQL code an.
    wenn du es nicht hinbekommst 2x die Personen tabelle dazuzujoinen, dann poste den von access generierten SQL code mit nur Teilnehmer, Rechnungsempfaenger und 1x Personen zusammengejoint.



  • oder vielleicht stört sich access auch daran dass da nur "LEFT JOIN" statt "LEFT OUTER JOIN" steht?
    der fehlermeldung nach eher unwahrscheinlich, aber könntest du auch noch probieren.



  • das mit den joins war ok so .. und mit den alias hat dann schon (fast) alles funktioniert, da ich in einer access datenbank bin, und access dumm ist^^ wollen joins speziell geklammert werden Oò zusehen im folgenden beitrag:
    http://nm1m.blogspot.com/2007/10/multiple-left-joins-in-ms-access.html

    die lösung der fertigen query:
    SELECT pr.Vorname AS pr_Vorname,pr.Nachname AS pr_Nachname,pt.Vorname AS pt_Vorname,pt.Nachname AS pt_Nachname
    FROM ((((Teilnehmer AS t)
    LEFT JOIN Rechnungsempfaenger AS r ON t.Rechnungsempfaenger=r.ID)
    LEFT JOIN Personen AS pr ON pr.ID=r.Person)
    LEFT JOIN Personen AS pt ON pt.ID=t.Person)



  • seltsam.
    aber gut zu wissen.


Anmelden zum Antworten