Announcement

Collapse
No announcement yet.

Verknüpfung von tabellen, wobei mehrere Zeilen zu einer zusammengefügt werden

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

  • Verknüpfung von tabellen, wobei mehrere Zeilen zu einer zusammengefügt werden

    Hallo,
    ich habe folgende Tabellen:

    beitrag(beitrag_id, user_id, erstellungsdatum, titel, beschreibung)

    Datensatz: 1 | 1 | 2019-05-05 | test | text text text


    image(image_id, beitrag_id, url)

    Datensatz 1: 1 | 1 | img/img1.png
    Datensatz 2: 2 | 1 | img/img2.png
    Datensatz 3: 3 | 1 | img/img3.png


    Jetzt möchte ich aus beiden Tabellen alles mit der beitrag_id = 1 selektieren, sodass ich selected(beitrag_id, user_id, erstellungsdatum, titel, beschreibung, bild1, bild2, bild3) bekomme.
    Könnte mir da jemand mit dem Befehl helfen, kriege das nicht zusammen.
    Habe es jetzt mit
    SELECT beitrag.beitrag_id, beitrag.user_id, erstellungsdatum, titel, beschreibung, url FROM beitrag, image WHERE beitrag.beitrag_id = 1 AND image.beitrag_id = 1
    das geht aber nicht so wie ich mir das vorstelle :/

    Danke für die Hilfe.

  • #2
    das geht aber nicht so wie ich mir das vorstelle :/
    ...ist kein Fehler. Welche Fehlermeldung kommt oder warum entspricht das Ergebnis nicht deinen Erwartungen
    Christian

    Comment


    • UnknownInncoent
      UnknownInncoent commented
      Editing a comment
      Das Problem ist, dass ich nicht einen Datensatz zurückbekomme, sondern 3 weil ich 3 Bilder habe. Ich möchte aber, dass die 3 Datensätze aus image und der Datensatz aus beitrag zu EINEM Datensatz zusammengefügt werden.

  • #3
    Das könnte eigentlich so "gehen". Was gibt es für eine Fehlermeldung?

    Normale Schreibweise wäre allerdings etwas anders:
    Code:
    SELECT b.beitrag_id, user_id, erstellungsdatum, titel, beschreibung, url
      FROM beitrag b, image i
     WHERE b.beitrag_id = i.beitrag_id
      AND b.beitrag_id = 1
    Man sagt also zunächst, welche Felder übereinstimmen sollen und nicht einzeln, welches Feld, welchen Wert haben soll.

    Die etablierte Form ist der Join, hier wird zwischen der Bindung der Mengen (join) und Filtern (where) unterschieden.

    Code:
    SELECT b.beitrag_id, user_id, erstellungsdatum, titel, beschreibung, url
      FROM beitrag b
      JOIN image i
        ON b.beitrag_id = i.beitrag_id
     WHERE b.beitrag_id = 1
    So wird aus dem Statement selbst sichtbar, welche Schlüsselfelder verwendet werden und welche Felder lediglich als Filter genutzt werden.
    Diese Syntax entspricht dem Standard und bietet auch herstellerunabhängig mehr Varianten bei > OUTER JOINS.

    Comment


    • UnknownInncoent
      UnknownInncoent commented
      Editing a comment
      Danke für den Syntax-Hinweis, allerdings habe ich jetzt immernoch drei Datensätze anstelle von einem

  • #4
    Wenn du hier kommentierst bekommt das keiner mit -> erstelle einen neuen Beitrag.


    Wenn du 3 Datensätze zurückbekommst ist das korrekt.
    Schließlich hast du in der 2. Tabelle 3 Datensätze zu dieser ID.
    Wie stellst du dir 1 Datensatz vor?
    Christian

    Comment


    • #5
      Also ich habe ja die Tabelle mit den verschiedenen Attributen. Zu diesen sollen bei der Selektion einfach noch drei weitere Attribute, die jeweils die url eines Bildes speichern hinzugefügt werden.

      Comment


      • #6
        Du hast keine Tabelle mit verschiedenen Attributen. Du hast 3 Datensätze
        Wie sollte das Ergebnis aussehen, wenn du 1 Mio Datensätze zur ID 1 hast?
        Wie stellst du dir die weitere Arbeit mit einer Ergebniszeile vor? Muss man dann abfragen, ob es eine Spalte 1 gibt, eine Spalte 2 usw.?

        Was ist einfacher bei der Verarbeitung, als eine Schleife über die Ergebnisdatensätze zu legen und jede zu bearbeiten?

        Bei Oracle heisst das Vorgehen Daten aus der Zeile in die Spalte und umgekehrt Pivot bzw. Unpivot

        https://modern-sql.com/de/anwendung/pivot

        https://stackoverflow.com/questions/...ql-pivot-table
        Zuletzt editiert von Christian Marquardt; 07.05.2019, 07:13.
        Christian

        Comment


        • #7
          Originally posted by UnknownInncoent View Post
          ..einfach noch drei weitere Attribute, die jeweils die url eines Bildes speichern hinzugefügt werden.
          Die Frage wäre m.E.:
          Sind es immer 3 Bilder (oder auch weniger- dann Spalten bleiben frei oder sollen dann Spalten fehlen?)
          oder
          Sind es wie von Christian angedeutet auch mal viel mehr Bilder, und müssten diese alle als weitere Spalten angezeigt werden oder würden nur 3 davon verwendet (wenn ja welche)



          Comment

          Working...
          X