# Attribute mit anderer Tabelle verbinden

**URL:** https://www.pg-forum.de/t/attribute-mit-anderer-tabelle-verbinden/12860
**Category:** Entwicklung
**Created:** [29. September 2023 um 06:12 UTC](https://www.pg-forum.de/t/attribute-mit-anderer-tabelle-verbinden/12860 "2023-09-29T06:12:31Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![theise](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/t/82dd89/32.png) [@theise](https://www.pg-forum.de/u/theise)
#### Post date: [29. September 2023 um 06:12 UTC](https://www.pg-forum.de/t/attribute-mit-anderer-tabelle-verbinden/12860/1 "2023-09-29T06:12:31Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![castorp](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/c/e99b99/32.png) [@castorp](https://www.pg-forum.de/u/castorp)
#### Post date: [29. September 2023 um 06:24 UTC](https://www.pg-forum.de/t/attribute-mit-anderer-tabelle-verbinden/12860/2 "2023-09-29T06:24:22Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![theise](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/t/82dd89/32.png) [@theise](https://www.pg-forum.de/u/theise)
#### Post date: [29. September 2023 um 08:58 UTC](https://www.pg-forum.de/t/attribute-mit-anderer-tabelle-verbinden/12860/3 "2023-09-29T08:58:50Z")

</div>

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

---

<div class="post-metadata">

### Author: ![theise](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/t/82dd89/32.png) [@theise](https://www.pg-forum.de/u/theise)
#### Post date: [4. Oktober 2023 um 09:44 UTC](https://www.pg-forum.de/t/attribute-mit-anderer-tabelle-verbinden/12860/4 "2023-10-04T09:44:12Z")

</div>

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

---

<div class="post-metadata">

### Author: ![castorp](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/c/e99b99/32.png) [@castorp](https://www.pg-forum.de/u/castorp)
#### Post date: [4. Oktober 2023 um 10:11 UTC](https://www.pg-forum.de/t/attribute-mit-anderer-tabelle-verbinden/12860/5 "2023-10-04T10:11:06Z")

</div>

> [@theise](#):
>
> aber mir ist das Prinzip noch nicht ganz klar.

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)

```sql
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](https://dbfiddle.uk/13IS-jZR)

---

<div class="post-metadata">

### Author: ![theise](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/t/82dd89/32.png) [@theise](https://www.pg-forum.de/u/theise)
#### Post date: [4. Oktober 2023 um 11:15 UTC](https://www.pg-forum.de/t/attribute-mit-anderer-tabelle-verbinden/12860/6 "2023-10-04T11:15:54Z")

</div>

Danke vielmals das war eine sehr gute Info.  
Perfekt.

---

<div class="post-metadata">

### Author: ![system](https://www.pg-forum.de/uploads/default/original/1X/dc97a981dd26692d5fb52e8b8fc7c090d7b9559a.png) [@system](https://www.pg-forum.de/u/system)
#### Post date: [3. Dezember 2023 um 11:16 UTC](https://www.pg-forum.de/t/attribute-mit-anderer-tabelle-verbinden/12860/7 "2023-12-03T11:16:16Z")

</div>

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