!Anfänger! - abfrage mit currval....

hi, ich habe ein kleines problem

ich bräuchte mal eure hilfe bei meiner abfrage, sinn ist es, eine adresse einzugtragen, sofort die PK zu erhalten und ihn dann in der benutzertabelle einzutragen -
kann mir jemand helfen?
(das hier funktioniert nicht - ich weiß :wink: )

INSERT INTO adresse(strasse,hausnummer) VALUES ('Musterstrasse',99);
SELECT currval('"adresse_adress_ID_seq"' AS ID
INSERT INTO benutzer(name,vorname,ADRESS_ID) VALUES ('Moni','Musterfrau',2,ID);

die adresstabelle hat ein serial - mit der erwähnten seq.
wie muss es richtig lauten? wäre total klasse :slight_smile:

Du kannst im SELECT auch funktionen verwenden, auch currval().

test=# create table s1(id serial primary key);
NOTICE:  CREATE TABLE will create implicit sequence "s1_id_seq" for serial column "s1.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "s1_pkey" for table "s1"
CREATE TABLE
test=*# create table s2(id int references s1, name text);
CREATE TABLE
test=*# insert into s1 values (default);
INSERT 0 1
test=*# insert into s2 select currval('s1_id_seq'), 'test';
INSERT 0 1
test=*# select * from s1;
 id
----
  1
(1 row)

test=*# select * from s2;
 id | name
----+------
  1 | test
(1 row)

Andreas

funktioniert bei mir nicht - hatte ich auch shcon vorher probiert direkt zuzugrreifen…

vielleicht irgendwo bei mir ein syntaxfehler?

->

 
INSERT INTO adresse(strasse,hausnummer) VALUES ('Musterstr',99);
INSERT INTO benutzer(name,ADRESS_ID2) VALUES ('Mustermann',select currval('"adresse_adress_ID_seq"'));

ergibt folgende Fehlermeldung :
ERROR: syntax error at or near “select”
SQL Status:42601

(und das select ist vor currval unterstrichen)



INSERT INTO benutzer(name,ADRESS_ID2) VALUES ('Mustermann', currval('adresse_adress_ID_seq'));

Wenn Du in Spaltennamen mit GrOßkLeIn hantieren willst, mußt Du noch passend einige " einstreuen.

Andreas

Andreas

juhu es klappt - danke danke :slight_smile:

das mit der großklein schreibung hat mich seit gestern aufgehalten - muss ich irgendwo überlesen haben grummel

und das in dem insert kein SELECT nochmal vorkommt sondern direkt auf currval zugegriffen wird…

super-großes dankeschön :slight_smile:

p.s. ach wie ich das liebe beim programmieren - kleine fehler zerstören den arbeitsfluss :wink: