Hallo,
ich möchte in meinen Datenbanken eine "spezielle" Gruppierungsabfrage machen (ähnlich wie ein KgV). Dazu habe ich bspw. folgende Datensätze:
tbl_Person
ID / Name
0 / Hans
1 / Tom
2 / Marta
3 / Norbert
tbl_Auftrag
Auftragsnr / Person
1000 / 0
1000 / 1
1000 / 3
2010 / 1
2010 / 2
2010 / 3
3015 / 1
3015 / 3
4540 / 0
4540 / 1
4540 / 2
4540 / 3
Nun möchte ich mit einem SQL Statement herausfinden, welche Personen bei allen aufgelisteten Aufträgen beteiligt waren. In diesem Falle also Person 1 und 3:
An Auftrag 1000 ist Person 1 und 3 beteiligt
An Auftrag 2010 ist Person 1 und 3 beteiligt
An Auftrag 3015 ist Person 1 und 3 beteiligt
An Auftrag 4540 ist Person 1 und 3 beteiligt
Ich möchte also Personen 1 und 3 als Datensätze erhalten. Hat jemand eine Idee?
Danke im Voraus!
SELECT
A.Auftragsnr
P.Name
FROM
tbl_Person P,
tbl_Auftrag A
where P.ID = A.Person
AND A.Auftragsnr = 1000
Ergebniss:
Auftragsnr | Name
1000 | Hans
1000 | Tom
1000 | Norbert
Ich hoffe das meintest du.
MfG
Björn
Das Leben ist schön!
Oh, sorry hatte dich miss verstanden.
SELECT
A.Auftragsnr
FROM
tbl_Person P,
tbl_Auftrag A
where P.ID = A.Person
AND P.ID in (1,3)
group by A.Auftragsnr
having count(*) = 2
Das liefert dir die Auftragsnummer, in welchem Benutzer 1 und 3 **gemeinsamm **vorhanden sind.
Damit kannst du dann ja weiter Joinen.
MfG
Björn
Das Leben ist schön!
Wenn es vier verschiedene Aufträge gibt, muss die Person in der tbl_Auftrag vier Zeilen besitzen. Also einmal DISTINCT Auftragsnummer zählen und dann die Zeilen gruppiert nach der Person zählen. Das geht in einem Statement wenn DISTINCT Auftragsnummer als Where-Subselect gezählt wird.
@Viper: danke für das Beispiel. Ich will die Abfrage jedoch allgemeingültig machen und nicht konkret für dieses Beispiel ..
@witte: kannst du bitte ein Beispielstatement schreiben?
Witte hat genau das hat das beschrieben was ich dir als Beispiel geschrieben habe.
Das Leben ist schön!
Ich dachte eher so:
SELECT Person,COUNT(*) AS anzahl
FROM tbl_Auftrag
GROUP BY Person
HAVING COUNT(*) = (SELECT COUNT(*) FROM (SELECT DISTINCT Auftragsnr FROM tbl_Auftrag))
Ich weiß nicht ob Deine mysql-Version dynamic views unterstützt, probier mal.
@Viper78: P.ID in (1,3) hat er beispielhaft gemeint. Er will Personen haben die an allen Aufträgen beteiligt sind.
Mit dieser Bemerkung wird Dir niemand helfen können, Du solltest schon beschreiben welche Fehlermeldung/Ausgaben erscheinen.
Außerdem habe ich den Weg nur prinzipiell gezeigt, Du müsstest das noch auf Mysql/DB2 adaptieren.
Naja keine Fehlermeldung, aber die Ergebnistabelle ist leer unter bestimmten Umständen ... z.B. wenn es immer identisch viele Personen gibt zu einem Auftrag ...