Kuinka lisätä arvoja taulukkoon valitusta kyselystä PostgreSQL: ssä?

Minulla on taulukko items (item_id serial, name varchar(10), item_group int) ja taulukko items_ver (id serial, item_id int, name varchar(10), item_group int).

Haluan nyt lisätä rivin kohtaan items_ver kohteesta items. Onko tätä varten olemassa lyhyttä SQL-syntaksia?

Olen kokeillut:

INSERT INTO items_ver VALUES (SELECT * FROM items WHERE item_id = 2); 

mutta saan syntaksivirheen:

ERROR: syntax error at or near "select" LINE 1: INSERT INTO items_ver VALUES (SELECT * FROM items WHERE item... 

Yritin nyt:

INSERT INTO items_ver SELECT * FROM items WHERE item_id = 2; 

Se toimi paremmin, mutta sain virhe:

ERROR: column "item_group" is of type integer but expression is of type character varying LINE 1: INSERT INTO items_ver SELECT * FROM items WHERE item_id = 2; 

Tämä voi johtua siitä, että sarakkeet on määritelty taulukoissa eri järjestyksessä. Onko sarakkeiden järjestyksellä merkitystä? Toivoin, että PostgreSQL vastaa sarakkeiden nimiä.

Vastaa

Sarakkeiden järjestyksellä on merkitystä, jos (ja vain jos) sarakkeiden järjestys voi esimerkiksi:

insert into items_ver select * from items where item_id=2; 

Tai jos ne eivät täsmää, voit esimerkiksi:

insert into items_ver(item_id, item_group, name) select * from items where item_id=2; 

mutta sarakkeiden järjestykseen luottaminen on vika, joka odottaa tapahtumista (se voi muuttua, samoin kuin sarakkeiden lukumäärä) – se myös vaikeuttaa SQL: n lukemista

Ei ole mitään hyvää ” pikakuvake ”- sinun on lueteltava erikseen sarakkeet sekä taululle, johon syötät, että kyselylle, jota käytät lähdetiedoille, esimerkiksi:

insert into items_ver (item_id, name, item_group) select item_id, name, item_group from items where item_id=2; 

dbfiddle täällä

Vastaa

INSERT INTO test_import_two (name, name1, name2) (SELECT name, name1, name2 FROM test_import_one WHERE id = 2) 

Samalle taulukolle

INSERT INTO test_import_three (id1, name1, name2) (SELECT 216 ,name1, name2 FROM test_import_three WHERE id = 4) 

Vastaus

INSERT INTO gate_pass( site_id, gate_pass_element, sequence_no, createdby, createddate, lastmodifiedby, lastmodifieddate) SELECT 1, gatepasselement, 3, 1,now(),1,now() FROM unnest(string_to_array("Bhushan,Amol,pallavi", E",")) as gatepasselement; 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *