cuchulainn
Mitglied
Hallo,
ich bekomme eine Abfrage mit SQL nicht hin. Vielleicht sehe ich den Wald vor lauter Bäumen nicht mehr, aber ich schaffe es einfach nicht. Hier mal der Sachverhalt.
Es gibt eine Tabelle "Person" und eine Tabelle "Liegenschaften". Personen können mit beliebig vielen Liegenschaften handeln; zwischen den beiden Tabellen besteht eine n:m-Beziehung, die über die Tabelle "Vertrag" läuft. Nun kann eine Person mit einer Liegenschaft handeln und kann später irgendwann noch einmal mit derselben Liegenschaft handeln. Die Person kann eine Liegenschaft z.B. kaufen und später verkaufen und noch einmal später wieder kaufen. Über die Art des Geschäfts habe ich keine Informationen - ich weiß nur, dass die Person mit der Liegenschaft gehandelt hat. Anmerkung: Es geht um eine Datenbank für die mittelalterliche Geschichte, also fehlen diese Informationen meist.
Hier die Tabellen mit den relevanten Feldern:
Person = personId, name
Vertrag = vertragId, personID_fk, liegenschaftId_fk
Liegenschaft = liegenschaft_id, name
Jetzt brauche ich eine Abfrage, die mir anzeigt, mit wie vielen Liegenschaften eine Person gehandelt hat. Dabei darf eine Liegenschaft aber nur einmal gezählt werden. Wenn also Person A mit den Liegenschaften X, Y, Z und X gehandelt hat (also vier Einträge in Vertrag), darf als Ergebnis nur 3 angezeigt werden, da die Liegenschaft X nur einmal gezählt werden darf.
Bei dieser Anweisung werden allerdings Liegenschaften doppelt gezählt:
Kann ich die Abfrage so modifizieren, dass dieselben Liegenschaften bei einer Person nur einmal gezählt werden?
Vielen Dank im Voraus,
Christopher
ich bekomme eine Abfrage mit SQL nicht hin. Vielleicht sehe ich den Wald vor lauter Bäumen nicht mehr, aber ich schaffe es einfach nicht. Hier mal der Sachverhalt.
Es gibt eine Tabelle "Person" und eine Tabelle "Liegenschaften". Personen können mit beliebig vielen Liegenschaften handeln; zwischen den beiden Tabellen besteht eine n:m-Beziehung, die über die Tabelle "Vertrag" läuft. Nun kann eine Person mit einer Liegenschaft handeln und kann später irgendwann noch einmal mit derselben Liegenschaft handeln. Die Person kann eine Liegenschaft z.B. kaufen und später verkaufen und noch einmal später wieder kaufen. Über die Art des Geschäfts habe ich keine Informationen - ich weiß nur, dass die Person mit der Liegenschaft gehandelt hat. Anmerkung: Es geht um eine Datenbank für die mittelalterliche Geschichte, also fehlen diese Informationen meist.
Hier die Tabellen mit den relevanten Feldern:
Person = personId, name
Vertrag = vertragId, personID_fk, liegenschaftId_fk
Liegenschaft = liegenschaft_id, name
Jetzt brauche ich eine Abfrage, die mir anzeigt, mit wie vielen Liegenschaften eine Person gehandelt hat. Dabei darf eine Liegenschaft aber nur einmal gezählt werden. Wenn also Person A mit den Liegenschaften X, Y, Z und X gehandelt hat (also vier Einträge in Vertrag), darf als Ergebnis nur 3 angezeigt werden, da die Liegenschaft X nur einmal gezählt werden darf.
Bei dieser Anweisung werden allerdings Liegenschaften doppelt gezählt:
Code:
select p.personid, name, count(vertragId) from person p, vertrag v where p.personId = v.personId group by personId
Kann ich die Abfrage so modifizieren, dass dieselben Liegenschaften bei einer Person nur einmal gezählt werden?
Vielen Dank im Voraus,
Christopher
Zuletzt bearbeitet: