Auf Thema antworten

Hallo zusammen,


ich habe bereits gesucht und leider nicht die passende Lösung gefunden ( oder ich wusste nicht, wie ich die passenden Stichwörter formulieren sollte)

ich habe folgenden Sachverhalt (vereinfacht dargestellt).

Ich habe eine Tabelle mit Bestellungen. Diese enthält die Person_id und die bestell_id. eine Person ( Person_id) kann mehrere bestellungen ( mehrere bestell_ids) haben. Die bestell_ids sind unique in der Tabelle Bestellungen.

Nun will ich eine Liste ausgeben lassen nur mit Personen (person_ids) die mehrere Bestellungen haben


gibt es eine elegantere Variante als diese Abfrage


SELECT b.person_id, s.name, s.vorname, b.bestell_id, b.bestelldatum,

from bestellungen as b


inner join person as s

ON (b.person_id = s.person_id)


where b.person_id

IN (SELECT person_id

    FROM bestellungen

    where ( bedingung)

    GROUP BY person_id

    HAVING (COUNT(person_id) > 1) )


Ergebnis wäre

person_id  bestellid

101            1

101             2

303            15

303             17

303             18


cool wäre es, wenn ich auch die Anzahl der Bestellungen pro Person ausgeben lassen könnte


person_id  bestellid  Anzahl

101            1              2

101             2             2

303            15            3

303             17           3

303             18           3


Dazu habe ich die Abfrage so  angepasst. Kann man das irgendwie optimieren?


SELECT b.person_id, b.bestell_id, h.anzahl

from bestellungen as b


inner join person as s

ON (b.person_id = s.person_id)


SELECT b.person_id, s.name, s.vorname, b.bestell_id, b.bestelldatum,

from bestellungen as b


inner join person as s

ON (b.person_id = s.person_id)


INNER JOIN

 (SELECT person_id, count(person_id) AS Anzahl

    FROM bestellungen

    where ( bedingung)

    GROUP BY person_id

    HAVING (COUNT(person_id) > 1) )

 as h ON h.person_id = b.person_id


Zurück
Oben