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
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