Dezember 07, 2021, 13:16:32

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Vermutlich SelfJoin

Begonnen von VerenaM, Oktober 28, 2021, 13:18:58

⏪ vorheriges - nächstes ⏩

VerenaM

Hallo zusammen!

Ich bin neu in diesem Forum und komme mit einer Frage, in der Hoffnung, dass Ihr mir helfen könnt.

Meine DB stellt eine Gruppe mit mehreren Untergruppen dar. Jede Untergruppe hat einen Gruppenleiter. Dabei kann ein Mitglied zu mehreren Untergruppen gehören und ein Gruppenleiter mehrere Gruppen betreuen.

In meiner DB sieht es so aus:

tblPerson: PersonID, LastName, FirstName
tblGroups: GroupID, GroupName
tbl_Person_Group: ID, PersonID, GroupID, PersonID_as_GroupLeader,

hier ist PersonID_as_GroupLeader=PersonID

Wie kann ich eine Query formulieren, die folgende Ausgabe hat:

LastName, FirstName, GroupName, LastName(GroupLeader), FirstName(GroupLeader)

Könnte mir hier eine::r bitte helfen?


Vielen Dank und schöne Grüße,
Verena

markus888

Oktober 28, 2021, 15:37:39 #1 Letzte Bearbeitung: Oktober 28, 2021, 15:59:48 von markus888
Hallo Verena,
aus meiner Sicht passen die Tabellen-Definitionen nicht ganz.

-> Jede Gruppe hat einen Gruppenleiter.
Daher muss der Gruppenleiter in die Tabelle tblGroups und bei tbl_Person_Group muss er natürlich raus.

Die Ausgabe ist ein simpler Join aller Tabellen.
Wenn der Aufbau passt ist auch die korrekte Ausgabe kein Problem.


Edit:
Außerdem sollte bei Untergruppen, in tblGroups auch die Parent_Group existieren.
Das brauchst du dann auch für die korrekte Darstellung der Hierarchie.

10 Jahre Access

VerenaM

Hallo Markus,

vielen Dank für deine Antwort! Ich habe mich vertan, sorry!
-> Jede Gruppe hat einen Gruppenleiter --- das ist nicht richtig

In unserem Fall ist es so, dass jede Gruppe mehrere Gruppenleiter haben kann und jedes Mitglied zu mehreren Gruppen gehören kann. Deswegen wollte ich eine Tabelle mit allen Gruppenmitgliedern machen (wo jeder nur einmal vorkommt tblPerson) und eine, die PesonID, GruppenID und PersonID (für den Gruppenleiter) beinhaltet. Und da dachte ich an SelfJoin. Nur dass ich in diesem Fall sogar zwei SelfJoin brauche. Ist es richtig gelöst? Oder geht es einfacher?
Ich  habe ein Bild angehängt.

Danke für deine Hilfe!
Verena


MzKlMu

Hallo,
Die 1:1 Beziehung über die beiden Primärschlüssel kann nicht richtig sein. Wenn das 2 Autowerte sind geht das auch nicht.
Gruß
Klaus

VerenaM

Hi,

ja, das hat nur beim Run einmal funktioniert (mit einer richtigen Ausgabe), sonst beklagt sich Access. Aber wie löst man das auf? Es sind drei Tabellen, die ich nicht zusammenbekomme :-/


Danke euch,
Verena

MzKlMu

Hallo,
ich sehe die Beziehungen eher so:
Gruß
Klaus

markus888

Zitat von: VerenaM am Oktober 29, 2021, 09:50:02In unserem Fall ist es so, dass jede Gruppe mehrere Gruppenleiter haben kann und jedes Mitglied zu mehreren Gruppen gehören kann.


Hallo Verena, bin schon am Weg ins Wochenende. So wie Klaus es zeigt würde ich es auch machen.
Wenn die Gruppen völlig unabhängig voneinander sind gibt es natürlich auch keine übergeordnete Gruppe.
10 Jahre Access

VerenaM

Hallo Klaus, hallo Markus!

Danke Euch!
Heißt es, dass ihr auch prinzipiell davon abraten würdet, solche Konstrukte zu benutzen? Und lieber eine Tabelle dazwischen anzulegen, bevor die Beziehungen zu kompliziert werden?

Viele Grüße und schönes WE,
Verena

MzKlMu

Hallo,
Zitat von: undefineddass ihr auch prinzipiell davon abraten würdet,
nein, nicht prinzipiell, sondern nur dann, wenn man es nicht braucht.
Als einfaches Beispiel für einen SelfJoin wäre z.B. die Zuweisung eines Chefs einer Person, wenn die Chefs ebenfalls aus der Personentabelle kommen.

PS:
In Deinem Bild in #2 ist übrigens kein SelfJoin.
Gruß
Klaus

VerenaM

Alles klar! Dann werde ich es so 'bauen'.

Danke Euch noch mal!
Verena

Beaker s.a.

Hallo,
Ich will ja nicht den Besserwisser rauskehren, aber zwei n:m-Tabellen
zwischen den gleichen Stammtabellen kann man auch in einer zusammen-
führen. Für den Leiter braucht es dann nur ein Flag.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

MzKlMu

Hallo,
es kann aber mehrere Leiter geben, nicht nur einer.

ZitatIn unserem Fall ist es so, dass jede Gruppe mehrere Gruppenleiter haben kann und jedes Mitglied zu mehreren Gruppen gehören kann.
Gruß
Klaus

Beaker s.a.

Hallo Klaus,
Also, wie gesagt, ich lasse mich immer gerne eines Besseren belehren,
aber das ist für mich kein Argument. Das Flag muss ja im Zusammenhang
mit einer Gruppe nicht eindeutig sein. Und selbst wenn eine Person
Leiter in mehreren Gruppen sein sollte, ist auch das mit einer einzigen
n:m abbildbar.
Oder habe ich da wirklich einen Knoten im Kopf?

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

DF6GL

Hallo,


@Ekkehard
Zitatist auch das mit einer einzigen
n:m abbildbar.


kann ich nachvollziehen, jedoch braucht es eine weitere Tabelle "tblPersonenStatus" (oder Optiongruppe)  und nicht nur ein Ja/Nein-Flag, wenn man alle Gegebenheiten berücksichten will.


tblPersonendaten


1:   nur Mitglied
2:   nur Teamleiter
3:   Mitglied und gleichzeitig Teamleiter


Beaker s.a.

Hallo Franz,
Danke, dass du mir im Prinzip zustimmst.
IMO spielt es dann auch keine Rolle ob der Status per Ja/Nein-Feld
oder mit einem FK bestimmt wird. Wobei eine Status-Tabelle nie ver-
kehrt sein sollte; im ursprünglichen Modell wäre das eine dritte n:m.
Welche Status nötig sind muss der TS entscheiden. Die von dir aufge-
zeigten braucht es m.E. nur, wenn es Teamleiter von ausserhalb einer
Gruppe gibt (Status 2).

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.