Problem beim erstellen eines Statments

SonicBe@m

Erfahrenes Mitglied
Hallo zusammen,
ich habe ein Problem beim erstellen eines Statements das ziemlich groß ist.
Genutzt wird MySQL 5 mit InnoDB

Ich habe mir über Eclipse das Schema der Tabellen etc. mal zusammen Bauen lassen und ich komm nicht auf das gewünschte ergebnis.
Ich sitze nun sicherlich schon über 2 Tagen an dem aber das Ziel ist noch sehr weit entfern.

Wenn ihr euch die Grafik anschaut möchte ich erreichen das folgende daten aus der Datenbank geliefert werden.

Benötigt werden folgende Daten

vorname
nachname
plz
ort
strasse
strasse_nr
vorwahl
nummer

diese sollen über tbl_knd.ap_knd verknüpft werden
und am ende sollte man das ganze über plz oder ort eingrenzen können

würde mich freuen wenn mir jemand helfen könnte ich bin absolut am verzweifeln.

Mit freundlichen Grüßen

SonicBe@m
 

Anhänge

  • 26769attachment.jpg
    26769attachment.jpg
    41,6 KB · Aufrufe: 17
Zuletzt bearbeitet:
Achso
hier mal das Statement was ich geschrieben hab
logisch klingt es aber es funktioniert nicht :(



Code:
select
tbl_knd.ap_knd,
tbl_vrnm.vorname,
tbl_nhnm.nachname,
tbl_strs.strasse,
tbl_strs_nr.strasse_nr,
tbl_plz.plz,
tbl_ort.ort,
tbl_vrwhl.vorwahl,
rel_tel.nummer
FROM
tbl_knd,
tbl_vrnm,
tbl_nhnm,
tbl_strs,
tbl_strs_nr,
tbl_plz,
tbl_ort,
rel_addr,
tbl_vrwhl,
rel_tel
WHERE
tbl_knd.ap_knd = rel_addr.knd_zs AND
rel_addr.knd_strs_zs = tbl_strs.ap_strs AND
rel_addr.knd_strs_nr_zs = tbl_strs_nr.ap_strs_nr AND
rel_addr.knd_ort_zs = tbl_ort.ap_ort AND
rel_addr.knd_plz_zs = tbl_plz.plz AND
tbl_knd.vrnm_zs = tbl_vrnm.ap_vrnm AND
tbl_knd.nhnm_zs = tbl_nhnm.ap_nhnm AND
rel_tel.vorwahl_zs = tbl_vrwhl.vorwahl AND
tbl_plz.plz like '13%'

Ohne der Prüfung auf PLZ geht es zwar, aber dann ist das ja nicht eingegrenzt :(
und mit der eingrenzung bekomm ich kein ergebnis.
Einer ne ahnung woran das liegt?
Es sollen in diesem fall alle Daten die oben Selektiert werden ausgegeben werden
und eingeschrenkt soll es durch die Postleitzahlen werden die von 13000 bis 13999 gehen
 
Zuletzt bearbeitet:
Hier nochmal ich hab das nun mit JOIN versucht aber das gelingt mir überhaupt nicht
ich bekomme nur Fehler

kann mir hierbei vielleicht einer helfen das das funktioniert?

Code:
select
tbl_knd.ap_knd ,
tbl_vrnm.vorname,
tbl_nhnm.nachname,
tbl_strs.strasse,
tbl_strs_nr.strasse_nr,
tbl_plz.plz,
tbl_ort.ort,
rel_tel.nummer,
tbl_vrwhl.vorwahl
FROM
tbl_knd,
tbl_vrnm,
tbl_nhnm,
tbl_strs,
tbl_strs_nr,
tbl_plz,
tbl_ort,
rel_addr,
rel_tel,
tbl_vrwhl
LEFT OUTER JOIN rel_addr AS knd_num ON tbl_knd.ap_knd = rel_addr.knd_zs
LEFT OUTER JOIN tbl_strs AS str ON rel_addr.knd_strs_zs = tbl_strs.ap_strs
LEFT OUTER JOIN tbl_strs_nr AS str_nr ON rel_addr.knd_strs_nr_zs = tbl_strs_nr.ap_strs_nr
LEFT OUTER JOIN tbl_ort AS ort ON rel_addr.knd_ort_zs = tbl_ort.ap_ort
LEFT OUTER JOIN tbl_plz AS plz ON rel_addr.knd_plz_zs = tbl_plz.ap_plz
LEFT OUTER JOIN tbl_vrnm AS vrnm ON tbl_knd.vrnm_zs = tbl_vrnm.ap_vrnm
LEFT OUTER JOIN tbl_nhnm AS nhnm ON tbl_knd.nhnm_zs = tbl_nhnm.ap_nhnm
LEFT OUTER JOIN tbl_vrwhl AS vrwhl ON rel_tel.vorwahl_zs = tbl_vrwhl.ap_vorwahl
WHERE
tbl_plz.plz like '13%'
limit 0,50;
 
Dank Herrn Goppelt bin ich nun auf diese Lösung gekommen, und habe zugleich in etwa das Prinzip vom JOIN verstanden.
Nochmals vielen Dank Herr Goppelt.

Code:
SELECT K.ap_knd, Vname.vorname, Nname.nachname,plz.plz, ort.ort, strs.strasse,
strs_nr.strasse_nr, Vwahl.vorwahl, T.nummer
FROM tbl_knd K
RIGHT OUTER JOIN rel_addr A ON K.ap_knd = A.knd_zs
RIGHT OUTER JOIN rel_tel T ON K.ap_knd = T.knd_zs
LEFT OUTER JOIN tbl_vrwhl Vwahl ON T.vorwahl_zs = Vwahl.ap_vorwahl
LEFT OUTER JOIN tbl_vrnm Vname ON K.vrnm_zs = Vname.ap_vrnm
LEFT OUTER JOIN tbl_nhnm Nname ON K.nhnm_zs = Nname.ap_nhnm
LEFT OUTER JOIN tbl_strs strs ON A.knd_strs_zs = strs.ap_strs
LEFT OUTER JOIN tbl_strs_nr strs_nr ON A.knd_strs_nr_zs = strs_nr.ap_strs_nr
LEFT OUTER JOIN tbl_ort ort ON A.knd_ort_zs = ort.ap_ort
LEFT OUTER JOIN tbl_plz plz ON A.knd_plz_zs = plz.ap_plz
WHERE
plz.plz like "13%";

der LEFT OUTER JOIN ermöglicht es das selbst wenn einträge NULL enthalten diese übernommen werden.
Ich denke es ist jedem klar das es fatal wäre das ein Eintrag nur weil kein Ort oder andere unwichtige Daten nicht vorhanden sind rausfliegen.

MfG
SonicBe@m
 
Zuletzt bearbeitet:
Zurück