Zusammenfassen von Daten

Enigma228

Benutzer
Beiträge
7
Hi Leute.. hab mal wieder ne Frage..

ich habe 3 Tabellen member, position, pos_of_a_member (sind nur Testdummys)
member kann mehrere positionen haben und position mehrere Member also n:m

position (id, title)
member (id, name, vorname)
pos_of_a_member (id, member_id, pos_id)

Wie ich sie aufrufe verstehe ich,
Code:
SELECT member.vorname, member.name, position.title
FROM pos_of_a_member AS pom
LEFT JOIN member ON member.id = pom.member_id
LEFT JOIN position ON position.id = pom.pos_id

Aber das ruft alle mit Wiederholungen bei den membern auf.

Ich möchte es so haben :
vorname, name, title (alle in einer Zeile)

z.B.
"Hans" "Wurst" "Fussballgott, Weltwunder, Spassbremse"

Wie mache ich sowas?

Vielen Dank im Voraus
Thomas












 
Zuletzt bearbeitet:
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.846
Hi Leute.. hab mal wieder ne Frage..

ich habe 3 Tabellen member, position, pos_of_a_member (sind nur Testdummys)
member kann mehrere positionen haben und position mehrere Member also n:m

position (id, title)
member (id, name, vorname)
pos_of_a_member (id, member_id, pos_id)

Wie ich sie aufrufe verstehe ich,
Code:
SELECT member.vorname, member.name, position.title
FROM pos_of_a_member AS pom
LEFT JOIN member ON member.id = pom.member_id
LEFT JOIN position ON position.id = pom.pos_id

Aber das ruft alle mit Wiederholungen bei den membern auf.

Ich möchte es so haben :
vorname, name, title (alle in einer Zeile)

z.B.
"Hans" "Wurst" "Fussballgott, Weltwunder, Spassbremse"

Wie mache ich sowas?

Du willst also die Titel aggregieren, oder?

Bei deinem MySQL geht das irknwie mit string_concat oder so, ich nutze das Spielzeug nicht.
 

akretschmer

Datenbank-Guru
Beiträge
9.846
Wie wäre deine Anfrage bei PostgreSQL.. vielleicht kann ich mir daraus den Hinweis holen den ich brauche..

Code:
test=*# select * from foo;
i |  t
---+-------
1 | foo
1 | bar
2 | batz
2 | bla
1 | laber
2 | sülz
(6 rows)

Time: 0,181 ms
test=*# select i, array_agg(t) from foo group by i;
i |    array_agg
---+-----------------
1 | {foo,bar,laber}
2 | {batz,bla,sülz}
(2 rows)

Time: 0,230 ms
test=*# select i, array_to_string(array_agg(t),',') from foo group by i;
i | array_to_string
---+-----------------
1 | foo,bar,laber
2 | batz,bla,sülz
(2 rows)
 
Werbung:

Enigma228

Benutzer
Beiträge
7
Du wirst es kaum glauben, aber das war die Lösung..

Code:
SELECT member.vorname, member.name, GROUP_CONCAT( position.title ) AS titel
FROM pos_of_a_member AS pom
LEFT JOIN member ON member.id = pom.member_id
LEFT JOIN position ON position.id = pom.pos_id
GROUP BY member.name

Vielen Dank
Thomas
 
Oben