Attribute mit anderer Tabelle verbinden

Hallo
Ich habe eine Tabelle Objekte mit 3 Attributen z.B. Kostenträger / Rechnungsempfänger / Verantwortlicher. Eine Tabelle Personal. Es sind unterschiedliche Personen. Wie kann ich die Tabellen verknüpfen so das jeweils die richtige Person bei der Ausgabe erscheint.

Du musst die Tabelle personal dreimal joinen:

 select o.*, 
           kt.name as kostentraeger, 
           re.name as rechnungsempfaenger, 
           v.name as verantwortlicher
from objekt o
   left join personal kt on o.kostentraeger = kt.id
   left join personal re on o.rechnungsempfaenger = re.id
   left join personal v on o.verantwortlicher = v.id

Die Spaltennamen sind natürlich nur geraten - die musst Du anpassen.

Hallo castorp,
danke für die schnelle Antwort. Ich werde es umsetzen.
Beste Grüße

Hallo hab’s mal versucht aber mir ist das Prinzip noch nicht ganz klar.
Hier mal die konkreten Daten:

Tabelle t_personal
personal_id | name | vorname | e_mail
--------------- + ----------- + ------------- + ---------------------------------+

Tabelle t_objekte
ob_id | obname | antragsteller | rzusteller | rempfaenger | kostentraeger |
------------±------- + --------------- + ----------- + ----------------- + ----------------- +

ich habe in der Tabelle jeweils einen Fremdschlüssel:
antragsteller->personal_id
rzusteller->personal_id
rempfaenger->personal_id
kostentraeger->personal_id

was vermutlich aber nicht richtig ist.
danke für deine Hilfe

Die Fremdschlüssel völlig richtig definiert.

Du musst für jede Person die Du anzeigen willst die Tabelle mit den Objekte zu der Tabelle mit den Personen joinen. LEFT JOIN ist ein sog. "outer join der auch dann den Datensatz aus der Objekte Tabelle liefert wenn keine Person existiert (z.B. weil das Feld NULL ist)

select o.ob_id, 
       o.obname, 
       a.name as antragsteller,
       rz.name as zusteller,
       empf.name as empfaenger,
       kt.name as kostentraeger
from t_objekte o
  left join t_personal a on a.personal_id = o.antragsteller
  left join t_personal rz on rz.personal_id = o.rzusteller
  left join t_personal empf on empf.personal_id = o.rempfaenger
  left join t_personal kt on kt.personal_id = o.kostentraeger
;

Wenn Du den vollständigen Namen der Person anzeigen willst, dann musst Du entweder jeweils beide Spalten im SELECT aufnehmen z.B. a.name as antragsteller_vorname, a.name as antragsteller_name oder Du machst einen Wert daraus indem Du die verknüpfst: concat_ws(' ', a.vorname, a.name) as antragsteller

Hier ist ein kleines Beispiel: Postgres 16 | db<>fiddle

Danke vielmals das war eine sehr gute Info.
Perfekt.

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.