SQL Abfrage - Ausgabe von Person mit Privat- und Dienstadresse
Hallo,
ich hoffe, dass meine Anforderung irgendwie umsetzbar ist, habe es leider nicht hinbekommen.
Ich habe in einer Software die folgenden Tabellen:
dtKoerperschaften:
dtAdressen:
idAdressTyp = 1 = Privatadresse
idAdressTyp = 3 = Dienstadresse
Jetzt möchte ich gerne das folgende als Ausgabe bekommen:
Es sollen also nicht mehr gültige und ungültige Adressen ignoriert werden. Darüber hinaus sollen die Dienstadressen einer Person nur dann mit ausgegeben werden, wenn sie auch vorhanden sind. Folgendes habe ich bisher:
Mein Problem aktuell ist, dass er bei obriger Abfrage nur die Person mit der IdPerson = 1 ausgibt. Lasse ich den Filter "AND DA.IdAdressTyp = '3'" weg bekomme ich bei der Ausgabe die Privatadresse in Privatstrasse & Dienststrasse ausgeben und zusätzlich nochmals den korrekten Datensatz. Leider habe ich keine Möglichkeit gefunden die falsche Ausgabe los zu werden.
Vielen Dank für die Hilfe schonmals im vorraus.
ich hoffe, dass meine Anforderung irgendwie umsetzbar ist, habe es leider nicht hinbekommen.
Ich habe in einer Software die folgenden Tabellen:
dtKoerperschaften:
ID | Vorname | Nachname | gueltigBis | Fahrtkosten |
---|---|---|---|---|
1 | Vorname1 | Nachname 1 | 9998-12-31 | 1 |
2 | Vorname2 | Nachname 2 | 9998-12-31 | 0 |
3 | Vorname3 | Nachname 3 | 2016-12-31 | 1 |
4 | Nachname4 | 9998-12-31 | 0 |
dtAdressen:
ID | idKoerperschaft | Strasse | PrivatPLZ | idAdressTyp | gueltigBis |
---|---|---|---|---|---|
1 | 1 | Privatstrasse1 13 | PLZ1 | 1 | 9998-12-31 |
2 | 1 | Dienststrasse1 14 | PLZ1 | 3 | 9998-12-31 |
3 | 2 | Privatstrasse2 15 | PLZ2 | 1 | 9998-12-31 |
4 | 3 | Privatstrasse2 16 | PLZ1 | 1 | 2016-12-31 |
idAdressTyp = 1 = Privatadresse
idAdressTyp = 3 = Dienstadresse
Jetzt möchte ich gerne das folgende als Ausgabe bekommen:
IdPerson | Vorname | Nachname | Privatstrasse | PrivatPLZ | Dienststrasse | DienstPLZ |
---|---|---|---|---|---|---|
1 | Vorname1 | Nachname 1 | Privatstrasse1 13 | PLZ1 | Dienststrasse1 14 | PLZ1 |
2 | Vorname2 | Nachname 2 | Privatstrasse2 15 | PLZ2 | NULL | NULL |
Es sollen also nicht mehr gültige und ungültige Adressen ignoriert werden. Darüber hinaus sollen die Dienstadressen einer Person nur dann mit ausgegeben werden, wenn sie auch vorhanden sind. Folgendes habe ich bisher:
SELECT k.ID as IdPerson, k.Nachname, k.Vorname, PA.Strasse AS Privatstrasse, PA.IdPlz AS PrivatPLZ, DA.Strasse AS Dienststrasse, DA.IdPlz AS DienstPLZ
FROM
dtKoerperschaften k,
dtAdressen PA,
dtAdressen DA
JOIN dtAdressen PA ON k.ID = PA.idKoerperschaft
JOIN dtAdressen DA ON k.ID = DA.idKoerperschaft
WHERE
AND k.Vorname NOT LIKE ''
AND k.gueltigBis = '99981231'
AND k.Fahrtkosten = '1'
AND PA.IdAdressTyp = '1'
AND DA.IdAdressTyp = '3'
Mein Problem aktuell ist, dass er bei obriger Abfrage nur die Person mit der IdPerson = 1 ausgibt. Lasse ich den Filter "AND DA.IdAdressTyp = '3'" weg bekomme ich bei der Ausgabe die Privatadresse in Privatstrasse & Dienststrasse ausgeben und zusätzlich nochmals den korrekten Datensatz. Leider habe ich keine Möglichkeit gefunden die falsche Ausgabe los zu werden.
Vielen Dank für die Hilfe schonmals im vorraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 327965
Url: https://administrator.de/forum/sql-abfrage-ausgabe-von-person-mit-privat-und-dienstadresse-327965.html
Ausgedruckt am: 03.05.2025 um 16:05 Uhr
3 Kommentare
Neuester Kommentar
Mahlzeit,
mit deinem Versuch, die Trennung in der WHERE-Clause unterzubringen, erreichst du ja nur, dass die Ergebnisse ausgegeben werden, die beide Bedingungen erfüllen.
Für dein Vorhaben wäre eine Lösung, mit Inner Joins zu arbeiten und hier dann statt der fertigen Tabelle ein Subselect einzubinden.
Schaue dir mal folgendenden (ungetesteten) Code an
Gruß
em-pie
€dit: 2.Join-Statement angepasst (s.u.)
mit deinem Versuch, die Trennung in der WHERE-Clause unterzubringen, erreichst du ja nur, dass die Ergebnisse ausgegeben werden, die beide Bedingungen erfüllen.
Für dein Vorhaben wäre eine Lösung, mit Inner Joins zu arbeiten und hier dann statt der fertigen Tabelle ein Subselect einzubinden.
Schaue dir mal folgendenden (ungetesteten) Code an
SELECT
k.ID as IdPerson
, k.Nachname
, k.Vorname
, PA.Strasse AS Privatstrasse
, PA.IdPlz AS PrivatPLZ
, DA.Strasse AS Dienststrasse
, DA.IdPlz AS DienstPLZ
FROM
dtKoerperschaften k
INNER JOIN (
SELECT ID, idKoerperschaft, Strasse, PrivatPLZ
FROM dtAdressen
WHERE idAdresstyp=1
) as PA on k.ID=PA.idKoerperschaft
LEFT JOIN (
Select ID, idKoerperschaft, Strasse, PrivatPLZ
from dtAdressen
WHERE idAdresstyp=3
) as DA on k.ID=DA.idKoerperschaft
WHERE
AND k.Vorname NOT LIKE ''
AND k.gueltigBis = '99981231'
AND k.Fahrtkosten = '1'
Gruß
em-pie
€dit: 2.Join-Statement angepasst (s.u.)