Thema InnerJoin

Hallo,
ich werd mit SQL einfach nicht grün. Ich bin irgendwie für die Abfragen einfach zu doof oder ich geh falsch an die Sache ran.

Ich hab drei Tabellen.

In der ersten stehen Informationen zu Firmen drin. Inhalt egal
Zweite Tabelle beinhaltet Infos zu Konten die in relation zu der Tabelle 1 stehen (wie Kontoname, Eröffnung, etc).

In der dritten Tabelle stehen Werte, welche Buchungen für das jeweilige Konto (aus Tabelle 2) geführt wurden.

Ich möchte nur, daß ich eine Liste kriege und zwar mit folgenden Punkten:

  1. Name und Eröffnung des Kontos aus Tabelle 2
  2. Name der Firma für das jeweilige Konto
  3. Die „Gesamtsumme“ der Kontobewegungen für das jeweilige Konto (z.B. Betrag ein: 6€, Betrag aus -4€ -> soll ausgegeben werden: 2€).

Punkt 1 und 2 hab ich ja hingekriegt, aber Punkt 3 pack ich nicht. Kann mir jemand bitte helfen. Danke im voraus…

gruß Euer Olli

Hallo,

  1. Die „Gesamtsumme“ der Kontobewegungen

wenn man so etwas hört (summe, durchschnitt, maximum usw) sollte man immer an gruppierung denken. einfach die 3. tabelle mit „hinzu-joinen“ und am ende der abfrage „GROUP BY kontoname“ schreiben (oder wie das feld bei dir heißt). zusätzlich muss in die ausgabeliste dann noch „SUM(betrag)“ (o.ä.) rein.

dabei ist zu beachten, dass dann nur noch die spalte ausgegeben werden kann, nach der gruppiert wurde. um dies um weitere spalten zu erweitern, müssen diese einfach an die GROUP BY-klausel angehängt werden (durch komma getrennt), und schon können die auch in der ausgabeliste stehen…

wenn dir das nicht weiterhilft: schreib am besten mal die drei relationsschemata sowie die fremdschlüsselbeziehungen hier rein, dann kann man das auch konkret am beispiel machen :wink:

mfg, micha

Guten Morgen Micha,
also die drei Tabellen sind wiefolgt aufgebaut:

 **firma kontoinfo kontoblatt**
PK firma\_ID PK kontoinfo\_ID PK kontoblatt\_ID
 firma FK firmaID FK kontoinfoID
 plz name datum
 ort eroeffnung betrag

PK ist in dem Fall der Primarykey und FK der Fremdschlüssel (angelehnt an das PK der jeweiligen Tabelle).

Wie gesagt, kontoinfo beinhaltet die Informationen zu einem Konto, sowie die ID der dazugehörigen Tabelle firma (damit ich weiß, welche Firma das Konto gehört) und möchte dann den dazugehörigen Gesamtbetrag von kontoblatt.betrag haben.

Mit Inner Join scheinen wohl die meisten irgendwie Probleme zu haben *g*. Ein Kollege hat das versucht mit WHERE zu machen, aber er hat es auch nicht geschafft.

Gruß Olli

guten morgen! :smile:

firma kontoinfo kontoblatt
PK firma_ID PK kontoinfo_ID PK kontoblatt_ID
firma FK firmaID FK kontoinfoID
plz name datum
ort eroeffnung betrag

dann ist bei dir kontoinfo.kontoinfo_ID aber sowas wie autoincrement, oder? ich hätte da wahrscheinlich eher (kontoinfo_ID, firmaID) als PK definiert, dann ist die sache auch eindeutig und jede firma kann quasi mit kontoinfo_ID=1 (oder 0) beginnen… bei kontiblatt.kontoblatt_ID wird das noch deutlicher, aber das ist sicherlich implementierungssache :wink:

select
 f.firma as Firmenname,
 k.name as Kontoname,
 k.eroeffnung,
 SUM(b.betrag) as Summe
from
 firma f,
 kontoinfo k,
 kontoblatt b
where
 (f.firma\_ID = k.firmaID) AND (k.kontoinfo\_ID = b.kontoinfoID)
group by
 k.kontoinfo\_ID,
 k.name,
 f.firma,
 k.eroeffnung;

ich hoffe das ergibt die gewünschte ausgabe :wink:

mfg, micha

Hallo Micha,
das ist es. Ich bin baff :smile: Dank dir echt für die Hilfe. ich weiß auch nicht, SQL und ich haben uns noch nie gemocht, aber vielleicht geh ich nur falsch an die Sache ran :smile:

Muß mir deine Lösung nochmals in Ruhe anschauen.

Vielen Dank,

Gruß Olli