Abfrageproblem mit falscher Adressdaten

05/08/2009 - 22:30 von Sebastian Brandt | Report spam
Hallo zusammen,

ich stehe gerade auf dem Schlauch bezüglich Datenbank/SQL?-Logik...

1. Ich habe eine Tabelle Adressen (tblAdressen) mit Adressdaten von
Schülern UND Fachlehrern (Felder: AdrNr, Nachname, Vorname, Straße, Ort,
Kennzeichen). Als Kennzeichen gilt "F" für Fachlehrer und "S" für Schüler.

2. Ich habe eine Tabelle Register (tblRegister) für die
Schüleranmeldungen (Felder: RegNr, Schülername, Unterrichtsform,
Unterrichtsort usw.)

3. Ich habe eine Tabelle für die Beteiligten (tblBeteiligte) mit den
Feldern BetID, RegNr, AdrNr, BetSel, Betreff.
In dieser Tabelle sind dann z.B. folgende Eintràge vorhanden:
BetID RegNr AdrNr BetSel Betreff
1 000001 13 SL (für Schüler) xxx
2 000001 31 FL (für Fachlehrer) xxx
3 000001 14 VP (für Vertragspartner)xxx


Ich möchte als Ergebnis folgende Liste zusammenstellen:
FLName SLName SLStraße SLOrt

Meine Versuche endeten alle damit, daß ich nur Straße und Ort des
FACHLEHRERS erhielt...

z.B. in etwa sowas:

SELECT [Nachname] & ", " & [Vorname] AS FLName, tblRegister.Schülername,
tblRegister.RegNr, [Straße] & " " & [Ort]) AS Adresse
FROM (tblBeteiligte INNER JOIN tblRegister ON tblBeteiligte.RegNr tblRegister.RegNr) INNER JOIN tblAdressen ON tblBeteiligte.AdrNr tblAdressen.AdrNr
WHERE (((tblAdressen.Kennzeichen)="F"))
ORDER BY [Nachname] & ", " & [Vorname], tblRegister.Schülername;


Ich kann logisch nicht nachvollziehen, was ich wie àndern muss, bin aber
sicher, daß das für Profis kein Problem ist? Oder geht das etwa mit
diesem Aufbau nicht???

Viele Grüße und Dank
Sebastian
 

Lesen sie die antworten

#1 Jens Schilling
06/08/2009 - 08:36 | Warnen spam
Hallo, Sebastian

Sebastian Brandt wrote:
ich stehe gerade auf dem Schlauch bezüglich Datenbank/SQL?-Logik...



IMO nicht nur mit der Logik, auch Dein Datenbankentwurf scheint mir nicht
korrekt; Anmerkungen mache ich dazu nachstehend.

1. Ich habe eine Tabelle Adressen (tblAdressen) mit Adressdaten von
Schülern UND Fachlehrern (Felder: AdrNr, Nachname, Vorname, Straße,
Ort, Kennzeichen). Als Kennzeichen gilt "F" für Fachlehrer und "S"
für Schüler.



Hier würde ich nicht einfach ein Kennzeichen vergeben, sondern vielmehr eine
eigene Tabelle anlegen ( tblAdressarten ? ) in der Du dann die Kennzeichen
für Schüler, Fachlehrer und Vertriebspartner anlegst. Bei mir gàbe es wohl
eine ID, eine Kurzform (S,F usw.) und eine Langform (Schüler,Lehrer usw.);
nur diese ID würde dann in der Tabelle mit den Adressen gespeichert.

2. Ich habe eine Tabelle Register (tblRegister) für die
Schüleranmeldungen (Felder: RegNr, Schülername, Unterrichtsform,
Unterrichtsort usw.)



Warum in der Tabelle tblRegister der Schülername ?
Hier sollte statt dessen ein Feld mit der ID der Adresse (AdrNr) hin - dort
gibt es doch bereits den Namen des Schülers.

3. Ich habe eine Tabelle für die Beteiligten (tblBeteiligte) mit den
Feldern BetID, RegNr, AdrNr, BetSel, Betreff.
In dieser Tabelle sind dann z.B. folgende Eintràge vorhanden:
BetID RegNr AdrNr BetSel Betreff
1 000001 13 SL (für Schüler) xxx
2 000001 31 FL (für Fachlehrer) xxx
3 000001 14 VP (für Vertragspartner)xxx



Hier würde sich das Feld BetSel erledigen, wenn bereits in der Tabellen mit
den Adressen das von mir vorgeschlagene Feld "Adressart" existierte;
abweichende Abkürzungen für den gleichen Begriff ( Schüler einmal "S",
einmal "SL") halt ich auch zumindest für unglücklich.

Ich möchte als Ergebnis folgende Liste zusammenstellen:
FLName SLName SLStraße SLOrt

Meine Versuche endeten alle damit, daß ich nur Straße und Ort des
FACHLEHRERS erhielt...



Nun zu Deinem eigentlichen Problem:

Du musst im Prinzip einfach nur die Tabelle mit den Adressdaten doppelt in
Deine Abfrage einfügen, einmal um die Daten des Lehrers zu ermitteln, und
einmal die der Schüler, diese dann verknüpft mit den anderen Tabellen. Diese
weitere Verknüpfung habe ich mir im folgenden Statement mal erspart, ich
denke, das Prinzip ist auch so verstàndlich.

SELECT tblAdressen.Nachname AS Fachlehrer,
tblAdressen_1.Nachname AS Schueler,
tblAdressen_1.Ort AS Adresse
FROM tblAdressen, tblAdressen AS tblAdressen_1
WHERE tblAdressen.Kennzeichen="F"
AND tblAdressen_1.Kennzeichen="S"
ORDER BY tblAdressen_1.Nachname

Setz dies jetzt aber bitte nicht einfach nur um, sondern mach' Dir bitte
auch Gedanken zu meinen Anmerkungen zum Datenbankentwurf.

Gruss
Jens

Ähnliche fragen