insert mit select

mullekular

Benutzer
Beiträge
12
moin nochmal,

ich möchte folgendes bewerkstelligen:

Wenn ein User eine "Eingabe" macht und z.B. in ein Feld einen String eingibt,
soll die DB beliebigen tabele gugn ob dieser String dort existiert und wenn ja, sich die dazugehörige ID ziehen und in die "Eingabe"tabelle schreiben.

In meinem konkreten Fall ist es so:

Ich habe eine Tabelle VogelArten mit VogelArten_ID und Deutscher_NAme;
der User gibt nun eine (vogel)Beobachtung ein.
er wird natürlich den Deutschen Namen bei der beobachtung eingeben.
Dieser würde dann in der Tabelle (vogel)Beobachtungen stehen.

ich möchte aber das dort die Arten_ID aus der Tabelle Arten steht.
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.171
moin nochmal,

ich möchte folgendes bewerkstelligen:

Wenn ein User eine "Eingabe" macht und z.B. in ein Feld einen String eingibt,
soll die DB beliebigen tabele gugn ob dieser String dort existiert und wenn ja, sich die dazugehörige ID ziehen und in die "Eingabe"tabelle schreiben.

In meinem konkreten Fall ist es so:

Ich habe eine Tabelle VogelArten mit VogelArten_ID und Deutscher_NAme;
der User gibt nun eine (vogel)Beobachtung ein.
er wird natürlich den Deutschen Namen bei der beobachtung eingeben.
Dieser würde dann in der Tabelle (vogel)Beobachtungen stehen.

ich möchte aber das dort die Arten_ID aus der Tabelle Arten steht.


Ist zwar irgendwie von hinten durch die Brust, aber egal:

Code:
test=# create table vogelarten (id int primary key, deutscher_name text);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "vogelarten_pkey" for table "vogelarten"
CREATE TABLE
test=*# copy vogelarten from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1    amsel
>> 2    meise
>> 3    schnapsdrossel
>> \.
test=*# create table beobachtung (ts timestamp, vogel int references vogelarten);
CREATE TABLE
test=*# create table eingabe (vogel text);
CREATE TABLE
test=*# create or replace function lookup_vogel() returns trigger as $$begin insert into beobachtung select now(), id from vogelarten where deutscher_name = new.vogel; return new; end;$$language plpgsql;
CREATE FUNCTION
test=*# create trigger vogel_trigger after insert on eingabe for each row execute procedure lookup_vogel();
CREATE TRIGGER
test=*# insert into eingabe values ('spatz');
INSERT 0 1
test=*# insert into eingabe values ('schnapsdrossel');
INSERT 0 1
test=*# select * from beobachtung ;
             ts             | vogel
----------------------------+-------
 2013-06-17 21:20:58.651938 |     3
(1 row)

Andreas
 
Werbung:

mullekular

Benutzer
Beiträge
12
puh vielen dank. da muss ich ertmal drüber nachdenken. habe schon versucht eine prozedur zu schreiben. das wollte nicht. ich werde dieses jetzt mal umsetzen! und melde mich später nochmal. vielen dank erstmal.
 
Oben