Hallo Zusammen,
habe folgende Frage die nicht unbedingt postgres-spezifisch ist, unter umständen.
Kann ich mit mehreren Tabellenfeldern einer Tabelle, auf EINE andere Tabelle referenzieren (z.B. mit Fremdschlüssel)
Bsp.: Tabelle: Daten Personen
Feld: id-daten id-person
kostentraeger name
antragsteller vorname
empfaenger email
ich möchte die Informationen zu den Feldern aus einer Tabelle (Personen) holen.
wenn ja wie funktioniert das?
Oder möchtest Du eher 2 Foreign Keys haben auf die selbe Tabelle? Zum Beispiel Fußball, eine Tabelle mit den Mannschaften und eine Tabelle mit Heim und Gast, die jeweils auf die Mannschaftstabelle zeigt? Auch das ist problemlos möglich.
Danke erstmal.
Wie gesagt. Ich habe eine Tabelle mit verschiedenen Feldern.
In drei der Felder stehen Personen (‘kostentraeger’, ‘empfaenger’, ‘antragsteller’). Die Namen sollen aus der Tabelle ‘personen’ kommen. Hätte ich nur ein Feld z.B. ‘kostentraeger’ kann ich das über einen foreign key auf die Tabelle ‘personen’ machen, funktioniert auch. Aber die beiden anderen Felder sollen jetzt ebenfalls aus der Tabelle personen die Namen holen. Da weiß ich nicht wie bzw. ob das auch über einen zweiten foreign key auf die gleiche Tabelle funktioniert. Die Namen in den drei Feldern können natürlich unterschiedlich sein oder aber auch die gleichen Namen enthalten.
Hoffe hab mich halbwegs verständlich ausgedrückt.
ja, geht, ganz easy. Bei der Abfrage mit Aliasen arbeiten.
test=# create table personen (id int primary key, name text);
CREATE TABLE
test=*# copy personen from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> 1 person1
>> 2 person2
>> 3 person3
>> \.
COPY 3
test=*# create table theise (p1 int references personen, p2 int references personen, p3 int references personen);
CREATE TABLE
test=*# copy theise from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> 1 2 3
>> \.
COPY 1
test=*#
test=*#
test=*# select * from theise t left join personen p1 on t.p1=p1.id left join personen p2 on t.p2=p2.id left join personen p3 on t.p3=p3.id;
p1 | p2 | p3 | id | name | id | name | id | name
----+----+----+----+---------+----+---------+----+---------
1 | 2 | 3 | 1 | person1 | 2 | person2 | 3 | person3
(1 row)