Unterschiedliche Fremdschlüssel auf eine Tabelle

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!