Hallo
ich bin der Marc und neu hier.
Ich habe mal eine Frage zu eine SQL Statement.
Ich habe eine Datenbank in der sind zur Personalverwaltung die Mitarbeiterdaten gespeichert.
Diese teilen sich über mehrere Tabellen auf:
Tabelle1 (Stammdaten) --> jeder MA natürlich eindeutig über ID und Personalkennung
künstlicher Schlüssel : ID
Personalkennnung as String
Name,Vorname, Email ... jeweils as String
Tabelle2 (Eintrittsdatum und Austrittsdatum) --> hier muss der MA min 1x auftauchen, aber kann unendlich auftauchen 1:n
künstlicher Schlüssel : ID
Personalkennnung as String
eintritt as Date, austritt as Date
Tabelle3 (Einsatzort) --> auch hier 1:n
künstlicher Schlüssel : ID
Personalkennnung as String
Einsatzort as String
start as Date, ende as Date
Tabelle4 (Wochenarbeitszeit) --> 1:n
künstlicher Schlüssel : ID
Personalkennnung as String
Wochenarbeitszeit as Double (zwischen 0,1 und 60 h)
Start as Date, Ende as Date
.
.
.
Nun möchte ich für ein ein beliebig wählbares Datum über eine Abfrage,
alle Mitarbeiter ausgeben, die an diesem Datum bei uns beschäftigt waren, und wo sie beschäftigt waren und mit wieviel Wochenstunden sie beschäftigt waren...
Natürlich kann ich das über mehrere Abfragen hintereinander sortieren und ausgeben lassen.
Jedoch ist das natürlich mühslig und Fehleranfällig und langsamer, als alles mit einer Abfrage..
Ich weiß, dass ich mit INNER JOIN Beziehungen unter den Tabellen herstellen kann. Aber wie funktioniert das bei mehreren Tabellen, wo ich dann auch selektieren muss, welcher der Datensätze ausgewählt wird (der in dem das aktuelle Datum liegt)
Also als Vorstellung
aktdatum = "31.01.2024"
SELECT * FROM Tabelle1 ( INNERJOIN Tabelle2 On ID.Tabelle1 = ID.Tabelle2 WHERE aktdatum BETWEEN eintritt.Tabelle2 AND austritt.Tabelle2) AND (INNERJOIN Tabelle3 On ID.Tabelle1 = ID.Tabelle3 WHERE aktdatum BETWEEN start.Tabelle3 AND ende.Tabelle3) ....
JA ich weiß das hier Syntaxfehler drin sind, allerdings geht es mir darum, ob diese Art von Verschachtelung möglich ist, oder wie ich das anstelle.
Am Ende soll dann in der Beispieltabelle nur die MA drin sind
die
a) bei uns beschäftigt waren an dem Daten
b) Ort wo sie an dem Datum beschäftigt waren
c) Wochenarbeitszeit an dem Datum
Ich hoffe ich konnte das verständlich ausdrücken,
ansonsten gerne melden
VG Marc
ich bin der Marc und neu hier.
Ich habe mal eine Frage zu eine SQL Statement.
Ich habe eine Datenbank in der sind zur Personalverwaltung die Mitarbeiterdaten gespeichert.
Diese teilen sich über mehrere Tabellen auf:
Tabelle1 (Stammdaten) --> jeder MA natürlich eindeutig über ID und Personalkennung
künstlicher Schlüssel : ID
Personalkennnung as String
Name,Vorname, Email ... jeweils as String
Tabelle2 (Eintrittsdatum und Austrittsdatum) --> hier muss der MA min 1x auftauchen, aber kann unendlich auftauchen 1:n
künstlicher Schlüssel : ID
Personalkennnung as String
eintritt as Date, austritt as Date
Tabelle3 (Einsatzort) --> auch hier 1:n
künstlicher Schlüssel : ID
Personalkennnung as String
Einsatzort as String
start as Date, ende as Date
Tabelle4 (Wochenarbeitszeit) --> 1:n
künstlicher Schlüssel : ID
Personalkennnung as String
Wochenarbeitszeit as Double (zwischen 0,1 und 60 h)
Start as Date, Ende as Date
.
.
.
Nun möchte ich für ein ein beliebig wählbares Datum über eine Abfrage,
alle Mitarbeiter ausgeben, die an diesem Datum bei uns beschäftigt waren, und wo sie beschäftigt waren und mit wieviel Wochenstunden sie beschäftigt waren...
Natürlich kann ich das über mehrere Abfragen hintereinander sortieren und ausgeben lassen.
Jedoch ist das natürlich mühslig und Fehleranfällig und langsamer, als alles mit einer Abfrage..
Ich weiß, dass ich mit INNER JOIN Beziehungen unter den Tabellen herstellen kann. Aber wie funktioniert das bei mehreren Tabellen, wo ich dann auch selektieren muss, welcher der Datensätze ausgewählt wird (der in dem das aktuelle Datum liegt)
Also als Vorstellung
aktdatum = "31.01.2024"
SELECT * FROM Tabelle1 ( INNERJOIN Tabelle2 On ID.Tabelle1 = ID.Tabelle2 WHERE aktdatum BETWEEN eintritt.Tabelle2 AND austritt.Tabelle2) AND (INNERJOIN Tabelle3 On ID.Tabelle1 = ID.Tabelle3 WHERE aktdatum BETWEEN start.Tabelle3 AND ende.Tabelle3) ....
JA ich weiß das hier Syntaxfehler drin sind, allerdings geht es mir darum, ob diese Art von Verschachtelung möglich ist, oder wie ich das anstelle.
Am Ende soll dann in der Beispieltabelle nur die MA drin sind
die
a) bei uns beschäftigt waren an dem Daten
b) Ort wo sie an dem Datum beschäftigt waren
c) Wochenarbeitszeit an dem Datum
Ich hoffe ich konnte das verständlich ausdrücken,
ansonsten gerne melden
VG Marc