Gruppieren der Daten bei einer 1:m-Beziehung

Gruppieren der Daten bei einer 1:m-Beziehung

am 23.09.2006 15:36:09 von Dirk Meier

Hallo NG!

Ich komme bei einer Abfrage nicht weiter.
Es gibt 2 Tabellen: 'buch' und 'buchinfo'. In 'buch' sind Bücher und in
'buchinfo' sind Schlagwörter zu Büchern gespeichert. Es ist eine 1:m
Beziehung.

Ich möchte nun eine Abfrage, wo ich alle Bücher mit allen Schlagwörtern
erhalte.

Erster Idee:
SELECT b.bez, bi.wort
FROM buch b, buchinfo bi
WHERE b.nr = bi.buch_nr

Ergebnis:
+--------------+-------------+
| bez | wort |
+--------------+-------------+
| Buch 1 | Test1 |
| Buch 1 | Test2 |
| Buch 2 | Test3 |
| Buch 2 | Test4 |
+--------------+-------------+

Nun bekomme ich aber die Bücher mehrmals. Ich hätte aber gerne, dass
jedes Buch nur einmal auftaucht. Also in etwa so:
+--------------+-------------+
| bez | wort |
+--------------+-------------+
| Buch 1 | Test1 |
| | Test2 |
| Buch 2 | Test3 |
| | Test4 |
+--------------+-------------+

Wie kann so eine "Gruppierung" machen?


Mfg, Dirk

Re: Gruppieren der Daten bei einer 1:m-Beziehung

am 24.09.2006 08:54:23 von Weinzierl Stefan

Dirk Meier wrote:
> Hallo NG!
>
> Ich komme bei einer Abfrage nicht weiter.
> Es gibt 2 Tabellen: 'buch' und 'buchinfo'. In 'buch' sind Bücher und in
> 'buchinfo' sind Schlagwörter zu Büchern gespeichert. Es ist eine 1:m
> Beziehung.
>
> Ich möchte nun eine Abfrage, wo ich alle Bücher mit allen Schlagwörtern
> erhalte.
>
> Erster Idee:
> SELECT b.bez, bi.wort
> FROM buch b, buchinfo bi
> WHERE b.nr = bi.buch_nr
>
> Ergebnis:
> +--------------+-------------+
> | bez | wort |
> +--------------+-------------+
> | Buch 1 | Test1 |
> | Buch 1 | Test2 |
> | Buch 2 | Test3 |
> | Buch 2 | Test4 |
> +--------------+-------------+
>
> Nun bekomme ich aber die Bücher mehrmals. Ich hätte aber gerne, dass
> jedes Buch nur einmal auftaucht. Also in etwa so:
> +--------------+-------------+
> | bez | wort |
> +--------------+-------------+
> | Buch 1 | Test1 |
> | | Test2 |
> | Buch 2 | Test3 |
> | | Test4 |
> +--------------+-------------+
>
> Wie kann so eine "Gruppierung" machen?
Meines Wissens gar nicht, und ich finde sie auch nicht sinnvoll. Du
könntest alternativ noch folgendes machen:

SELECT b.bez, GROUP_CONCAT(bi.wort)
FROM buch b, buchinfo bi
WHERE b.nr = bi.buch_nr
GROUP BY b.bez

Außerdem werden mit deiner Abfrage keine Bücher aufgelistet, die keine
Schlagworte haben.

SELECT b.bez, GROUP_CONCAT(bi.wort)
FROM buch b
LEFT JOIN buchinfo bi
ON (b.nr=bi.buch_nr)
GROUP BY b.bez

Stefan