Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Join u. / o. "pivoting"

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Join u. / o. "pivoting"

    Hallo @ all,

    ich habe drei Tabellen welche Daten über eine Seite speichern und die Möglichkeit bieten das jede Seite optionale Attribute mit Werten anlegen kann. Die Tabellenstruktur für die drei Tabellen schaut wie folgt aus:

    Code:
    pages:
     * page_id
     * page_name
    
    page_attributes:
     * attribute_id
     * column_name
     * name
    
    page_attribute_value:
     * attribute_id
     * page_id
     * value
    Mein Ziel ist es nun über einen SQL-Query folgendes dazustellen:
    Code:
    page_id | page_name | column_name (von page_attributes) |
    Beispiel:
    Code:
    pages:
    page_id: 1, page_name: home
    
    page_attributes:
    attribute_id: 1, column_name: test, name: Test
    
    page_attribute_value:
    attribute_id: 1, page_id: 1, value: abc
    
    page_id | page_name | test
    1 | home | abc
    Ich habe nun ewig rumgebaut und folgenden Query rausbekommen - aber iwie glaub ich der ist total falsch vom Ansatz her:
    Code:
    SELECT
     n.page_id,
     n.page_name,
     a.column_name,
     v.value as a.column_name
    FROM pages n
    JOIN page_attribute_value v on v.page_id = n.page_id
    JOIN page_attributes a on a.attribute_id = v.attribute_id
    Würde mich sehr freuen wenn jemand licht in mein Dunkel bringt

  • #2
    Zitat von nPoday Beitrag anzeigen
    Würde mich sehr freuen wenn jemand licht in mein Dunkel bringt
    Ich halt Dir mal die Lampe über Google und "sql multiple joins" und frage, was bei Dir nio und niov sein sollen. Vielleicht kannst ja Licht ins Dunkel bringen.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Hallo,

      danke für deine Antwort! Ich hab nach dem von dir geschriebenen Begriff gegoogelt aber leider nicht die Lösung für "mein Problem" gefunden.

      Ich habe den Query im Eingangspost aktualisiert, hier war noch ein Fehler bzgl. der Tabellen aliases. Der Query im Ausgangspost funktioniert leider nicht - die Zuweisung von "v.value as a.column_name" macht mir Probleme.

      Ziel ist es, das alle Attribute aus "page_attributes" für die in "page_attribute_value" ein Wert gesetzt ist als "spalte" mit dem jeweiligen Namen von "page_attributes.column_name" selektiert werden.

      Folgender Query lässt sich zwar ausführen, funktioniert aber in zweierlei hinsicht noch nicht wie gewünscht:
      Code:
      SELECT
       n.page_id,
       n.page_name,
       a.column_name,
       v.value
      FROM pages n
      JOIN page_attribute_value v on v.page_id = n.page_id
      JOIN page_attributes a on a.attribute_id = v.attribute_id
      1.) Die value wird nicht unter dem Spalten-Name aus "page_attributes" sondern unter value angezeigt
      2.) Wenn mehrere attribute existieren werden 2 Zweilen ausgegeben statt 2 "virtuelle" Spalten anzuzeigen

      Danke für deine / eure Hilfe

      Kommentar


      • #4
        Das funktioniert nicht so wie du dir das vorstellst. Du musst die Spalten explizit angeben, das ist selbst bei Datenbanken mit pivot funktionalität erforderlich. Bei mysql kannst du entweder für jede Spalte ein JOIN machen oder mit GROUP BY arbeiten. Wenn du nach "mysql pivot" suchst findest du genügend Beispiele dafür.

        Kommentar

        Lädt...
        X