Announcement

Collapse
No announcement yet.

Mehrfachabfrage eines Fremdschlüssels in einem SELECT

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mehrfachabfrage eines Fremdschlüssels in einem SELECT

    Folgende einfachen Tabellen:
    Person: ID (Primary), Name
    Reise: ID2 (Primary), Verantwortlicher (fKey auf Person.ID), Begleiter (fKey auf Person.ID)


    Ich möchte die Namen der Verantwortlichen und Begleiter aller Reisen mit einem SELECT abfragen, schaffe es aber nicht. Mit einer Person klappt es
    Code:
    SELECT Reise, Name FROM Reise LEFT JOIN Person ON Person.ID=Reise.Verantwortlicher
    Es müsste irgendwie mit zwei JOINs gehe, aber wie sieht das Statement dazu aus? Ich bekomme das nicht auf die Reihe, stattdessen nur Fehlermeldungen vom Server. Mein bescheidener Fehlversuch:
    Code:
    SELECT
        Reise,
        Name,
        Name2
    FROM
        (
        SELECT Name AS
            Name2
        FROM
            Reise
        LEFT JOIN Person ON Person.ID = Reise.Begleiter
    )
    LEFT JOIN Person ON Person.ID = Reise.Verantwortlicher
    Am Rande: im Sticky steht, man solle [highlight=sql] verwenden, das funktioniert aber nicht

  • #2
    SELECT
    Reise,
    (SELECT Name FROM Person ON Person.ID = Reise.Begleiter) as Begleiter,
    (SELECT Name FROM Person ON Person.ID = Reise.Verantwortlicher) as Verantwortlicher
    FROM Reise

    oder auch
    SELECT
    irgendwas von r,p1,p2
    FROM Reise r,
    left join Person p1 ON p1.ID = r.Begleiter,
    left join Person p2 ON p2.ID = r.Verantwortlicher
    Zuletzt editiert von Christian Marquardt; 15.12.2022, 14:29.
    Christian

    Comment


    • #3
      Klappt nicht. In beiden Fällen meldet der Server (phpAdmin) Fehler. Im ersten Fall
      Code:
      #1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'ON Person.ID = Reise.Begleiter) as Begleiter,
      (SELECT Name FROM Reise Person...' in Zeile 3
      Im zweiten Fall
      Code:
      #1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'left join Person p1 ON Person.ID = Reise.Begleiter,
      left join Person p2 ON P...' in Zeile 4
      SELECT @@version liefert: 10.5.18-MariaDB-1
      Zuletzt editiert von Stefan.K; 15.12.2022, 14:27.

      Comment


      • #4

        (SELECT Name FROM Reise Person...' in Zeile 3
        Oben korrigiert

        left join Person p1 ON p1.ID = r.Begleiter,
        left join Person p2 ON p2.ID = r.Verantwortlicher
        Christian

        Comment


        • #5
          Sowohl
          Code:
          SELECT
          Reise,p1,p2
          FROM Reise r,
          left join Person p1 ON p1.ID = r.Begleiter, left join Person p2 ON p2.ID = r.Verantwortlicher
          als auch
          Code:
          SELECT
          Reise,
          (SELECT Name FROM Reise, Person ON Person.ID = Reise.Begleiter) as Begleiter,
          (SELECT Name FROM Reise, Person ON Person.ID = Reise.Verantwortlicher) as Verantwortlicher
          FROM Reise
          ergeben Fehler #1064.

          Comment


          • #6
            SELECT
            ID,
            (SELECT Name FROM PERSON WHERE PERSON.ID = REISE.Begleiter) as Begleiter,
            (SELECT Name FROM PERSON WHERE PERSON.ID = REISE.Verantwortlicher) as Verantwortlicher
            FROM REISE
            https://ibb.co/myDTW8f

            SELECT
            *
            FROM REISE r
            left join PERSON p1 on r.BEGLEITER=p1.ID
            left join PERSON p2 on r.VERANTWORTLICHER=p2.ID
            https://ibb.co/18nyTjb
            Zuletzt editiert von Christian Marquardt; 15.12.2022, 14:46.
            Christian

            Comment


            • #7
              Yeah! Nu fluppts. Vielen Dank! Jetzt werde ich erstmal versuchen zu verstehen, was vorher alles falsch war...
              Im ersten Statement musste es WHERE statt ON heißen.
              Im zweiten Statement fehlte die Spaltenzuordnung, richtig ist:
              Code:
              SELECT
                  Reise,
                  p1.Name,
                  p2.Name
              FROM
                  Reise r
              LEFT JOIN Person p1 ON
                  p1.ID = r.Verantwortlicher
              LEFT JOIN Person p2 ON
                  p2.ID = r.Begleiter
              Die JOINs Methode gefällt mir besser. Jetzt habe ich endlich begriffen, wie man JOINs verkettet. Danke nochmals, Christian!
              Zuletzt editiert von Stefan.K; 15.12.2022, 15:04.

              Comment

              Working...
              X