Hallo zusammen,
ich möchte gerne eine Abfrage haben, jedoch gelingt mir das mangels Wissen nicht so recht.
id_wohn serial NOT NULL,
vid_bauw integer DEFAULT 0,
vid_schl integer NOT NULL DEFAULT 28,
vid_pbes integer DEFAULT 0,
vid_phausm integer DEFAULT 0,
vid_pverw integer DEFAULT 0,
vid_pmieter integer DEFAULT 0,
adrzusatz character varying(30)
etage character varying(30)
alle vid_p% zeigen in diese Tabelle auf den Primärschlüssel:
id_pers serial NOT NULL,
vid_adr integer,
vid_slstat integer,
kunr character(5),
sname character varying(40),
name character varying(50),
vna character varying(50),
anr character varying(20)
nun soll meine Abfrage die Namen der Leute die hinter vid_pbes->id_pers, vid_phausm->id_pers, vid_pmieter->id_pers stecken anzeigen.
Mit einem Namen geht das ja recht einfach:
select w.adrzusatz, w.etage, p.sname, p.vna, p.kunr from hc_wohn w, hc_pers p where w.vid_bauw = 55 and w.vid_pbes = p.id_pers;
jedoch an den weiteren Zeigern beiße ich mir bislang die Zähne aus.
Bitte Hinweise in welche Richtung ich lernen sollte.
Du joinst die Tabelle mehrfach, gibts ihr dabei immer einen passenden Alias. Über diesen kannst Du dann zugreifen.
Sinngemäß so:
select a.name, b.name, c.name from foo left join namen a on foo.a_id=a.id left join namen b on foo.b_id=b.id left join namen c on foo.c_id = c.id …
Du schaffst das, Grüße aus Herford., Andreas
Hallo Andreas,
wenn das Navi mal eingestellt ist…
SELECT DISTINCT b.sname, b.kunr, m.sname, m.kunr, h.sname, h.kunr, v.sname, v.kunr
FROM hc_wohn w
LEFT JOIN hc_pers b ON w.vid_pbes = b.id_pers
LEFT JOIN hc_pers m ON w.vid_pmieter = m.id_pers
LEFT JOIN hc_pers h ON w.vid_phausm = h.id_pers
LEFT JOIN hc_pers v ON (SELECT b.vid_pverw FROM hc_bauw b WHERE b.id_bauw = w.vid_bauw) = v.id_pers
WHERE w.vid_bauw = 581;
sname | kunr | sname | kunr | sname | kunr | sname | kunr
--------------+-------+--------+-------+--------+-------+-----------------+-------
ZU | 53782 | 00leer | 0 | 00leer | 0 | GR | 50484
PO | 54171 | 00leer | 0 | 00leer | 0 | GR | 50484
GU | 53879 | 00leer | 0 | 00leer | 0 | GR | 50484
HI | 52177 | 00leer | 0 | 00leer | 0 | GR | 50484
RO | 53221 | 00leer | 0 | 00leer | 0 | GR | 50484
WE | 54416 | 00leer | 0 | 00leer | 0 | GR | 50484
WA | 52559 | 00leer | 0 | 00leer | 0 | GR | 50484
HA | 52575 | 00leer | 0 | 00leer | 0 | GR | 50484
KR | 54653 | 00leer | 0 | 00leer | 0 | GR | 50484
HI | 53256 | 00leer | 0 | 00leer | 0 | GR | 50484
FE | 54674 | 00leer | 0 | 00leer | 0 | GR | 50484
RO | 53604 | 00leer | 0 | 00leer | 0 | GR | 50484
00leer | 0 | 00leer | 0 | 00leer | 0 | GR | 50484
ST | 52837 | 00leer | 0 | 00leer | 0 | GR | 50484
BE | 54277 | 00leer | 0 | 00leer | 0 | GR | 50484
SC | 54957 | 00leer | 0 | 00leer | 0 | GR | 50484
(16 Zeilen)
Herzlichen Dank!