Ilja: Mehrfaches Vorkommen finden

Beitrag lesen

yo,

so, wochenende ist vorbei...

Beim ersten bestellen eines Kunden wird immer die Vollversion bestellt. Dann bekommt das Produkt eine Seriennummer. Die Seriennummer bleibt dann aber immer gleich.

so langsam taste ich mich an euer daten-design ran. verstehe ich das richtig, dass ein kunde in der ersten bestellung einen eintrag in der tabelle software bekommt und pro update dann immer einen zusätzlichen eintrag auch in der tabelle software als auch in der tabelle bestellung ?

übrigens, eine relation ist keine beziehung zwischen zwei tabellen, sondern eine relation ist eben eine tabelle im kontext von datenbanken. aber das verwechseln die meisten. in wikipedia steht es richtig, falls du nachschauen willst.

idkd ist dann wie von dir erwähnt der primary-key der tabelle bestellungen, der auch in der tabelle software als fremdschlüssel abgelegt wird. der name ist nicht sonderlich gut gewählt, dachte doch in meinen ersten anflug, das wäre der primarykey der kunden. wenn dem so ist, wird auch schon die "grausamkeit" eures daten-designs sichtbar, scheint sich um eine 1:1 beziehung zwischen software und bestellung zu handeln, letztlich ist es ja eine entität und bildet eine bestellung einer software ab. gab es gründe es in zwei tabellen aufzuteilen ?

je nachdem, wie genau du die daten dargestellt haben willst, gibt es mehrere möglichkeiten. ich gebe dir mal meine erste in leicht abgeändeter form wieder. was mir fehlt, ist die spaltenbezeichnung des primarykey der tabelle software, den musst du reinschreiben in die unterabfrage. was die abfrage macht ist ein einfacher join zwischen software und bestellnug, wobei ich davon ausgehen, dass es sich dabei um eine 1:1 beziehung handelt. die korrelierte unterabfrage ermittelt dann zu jeder software/bestellung die anzahl aus, indem es nach gleichen maschserien und kundennummern in der jweikligen tabelle sucht. was mich noch interessieren würde, wenn zwei verschiedene kunden das gleiche produkt bestellen, gibt es dann eine andere seriennummer in der tabelle software oder gleicht sie sich ?

SELECT b.Kunde, s.IdKd, s.beschreibung, s.maschserien SerienNummer,
       (SELECT COUNT(*)
        FROM software s2
        INNER JOIN bestellung b2 ON b2.IdKd = s2.IdKd
        WHERE SUBSTRING(s2.maschserien, -6) = SUBSTRING(s.maschserien, -6)
        AND b2.kundennummer = b.kundennummer
       ) Anzahl
FROM software s
INNER JOIN bestellung b ON b.IdKd = s.IdKd
ORDER BY b.kundennummer, SUBSTRING(s.maschserien, -6)
;

das gibt dir erst mal eine auflistung der gesamten software und als unterabfrage wie oft diese software bestellt wurde. schau erst mal, ob das ergebnis stimmt nud dann kann man sie noch nach deinen wünschen anpassen.

Ilja