Datenbank-Abfrage über 5 Tabellen

alex130

Erfahrenes Mitglied
Hallo,
ich habe ein Problem und zwar habe ich folgende Tabellen:

schaden:
- Schadennr
- Polizzennr

Vertrag:
- ID
- Polizzennr
- Personennr
...

Person:
- Personennr
- PersArtCd (entweder N - Natürliche Person oder S - sonstige Person)

Natuerliche_person:
- Personennr
- Vorname
- Nachname

Sonstige_Person:
- Personennr
- Name

Und nun habe ich folgendes Problem ich frage die Datensätze aus der Tabelle "Schaden" ab nun habe ich aber keine Kundennamen dazu, also verbinde ich Schaden.Polizzennr mit Vertrag.Polizzennr dann Vertrag.Personennr mit Person.Personennr nun kann es aber natürliche oder sonstige Person sein, also gibt es eine Möglichkeit so eine Art IF Abfrage im query zu machen? Also wenn Person.PersArtCd = N ist, dann die Daten von natuerliche_person abfragen, andernfalls von sonstige_person....
Ich hoffe ihr wisst, was ich meine und könnt mir helfen.
Danke

LG Alex
 
guck mal ob dir Decode() hilft.

decode(Person.PersArtCd, "N", natuerliche_person.feld, sonstige_person.feld)

Das würde folgendem if() entsprechen:
Code:
if (Person.PersArtCd == 'N') 
  natuerliche_person.feld
else 
  sonstige_person.feld
 
Hi,
Danke für deine Antwort, hab mir eh schon überlegt das mit ner IF umzusetzen, allerdings habe ich es nicht geschaft...
Hab folgenden Query, aber MySQL meldet immer nen Error.
Danke
PHP:
SELECT schaden.ID, schaden.Schadennr, schaden.Polizzennr, schaden.Vermnr, schaden.SpartenCd, schaden.Ereigniszpkt, IF(p.PersArtCd == "N") THEN np.Familienname Kunde ELSE sp.Name Kunde END IF FROM schaden, person p, vertrag vtg, natuerliche_person np, sonstige_person sp WHERE schaden.BearbStandCd = "O"
AND schaden.Polizzennr = vtg.Polizzennr AND vtg.VN = p.Personennr AND IF(p.PersArtCd == "N") THEN p.Personennr = np.Personennr ELSE p.Personennr = sp.Personennr END IF
 
Hallo alex130,

hier mal eine Korrektur für die IF Abfrage (den Rest spare ich mir mal):

Code:
...
IF(p.PersArtCd = 'N',np.Familienname,sp.Name) AS Kunde
...

Funktioniert mit MySQL. :)
 
Zuletzt bearbeitet von einem Moderator:
ahso, decode() gibts blos unter oracle
oracle: decode / case
mysql: if
sqlserver: case

schön dass alles so standardisiert ist :)
 
Hallo,
jetzt hab ich echt ein riesen Problem, ich sitze heute schon den halben Tag in diesem Problem und kann es einfach nicht lösen.
Ich hab es hier mal zusammen gefasst und hoffe mir kann jemand helfen.
Danke

Code:
vertrag:
ID
Polizzennr
...

Sparte:
Polizzennr
SpartenCd

vers_objekt
Polizzennr
ObjLfnr
VersObjTxt (Entweder vers_person, vers_kfz oder vers_sache)

vers_element
Polizzennr
SpartenCd
ObjLfnr

Alle Tabellen hängen über die "Polizzennr" zusammen.
  • In der Tabelle "vers_objekt" steht im Feld "VersObjTxt" ein Wert drinen (entweder vers_person, vers_kfz oder vers_sache) je nach dem was drinen steht soll ein Wert aus der Tabelle geholt werden.
    Also wenn z.B. vers_sache drinen steht brauche ich das Feld "Ort" und "PLZ" aus der Tabelle "vers_sache"
  • Dann gibt es noch die Tabelle "vers_element" hier kann, muss aber kein Eintrag stehen
    Wenn einer drinen steht, dann ist entweder "SpartenCd" oder "ObjLfnr" ausgefüllt.
    Es kann immer nur eins dieser 3 Werte ausgefüllt werden, je nachdem was ausgefüllt ist, dort gehört es dazu
 
Zuletzt bearbeitet:
Hallo,

es würde helfen, wenn Du mal die Tabellenstruktur posten würdest, die oben kann es ja noch nicht sein, da ich dort nirgendwo Felder wie "Ort" oder "PLZ" sehe.

Wie eine IF Abfrage funktioniert, habe ich ja schon oben geschrieben, aber jetzt schonmal ein Tipp: du wirst auf jeden Fall ein JOIN brauchen (wahrscheinlich ein LEFT OUTER JOIN).
 
Zurück