PostgreSQL의 선택 쿼리에서 테이블에 값을 삽입하는 방법은 무엇입니까?

items (item_id serial, name varchar(10), item_group int) 테이블과 items_ver (id serial, item_id int, name varchar(10), item_group int) 테이블이 있습니다.

이제 items에서 items_ver에 행을 삽입하겠습니다. 이 작업을 수행하기위한 짧은 SQL 구문이 있습니까?

사용해 보았습니다 :

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

하지만 구문 오류가 발생합니다.

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

지금 시도했습니다 :

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

더 잘 작동했지만 오류 :

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; 

이는 열이 테이블에서 다른 순서로 정의 되었기 때문일 수 있습니다. 열 순서가 중요합니까? PostgreSQL이 열 이름과 일치하기를 바랍니다.

Answer

열 순서가 중요합니다. 일치 할 수 있습니다. 예를 들면 다음과 같습니다.

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

또는 일치하지 않는 경우 예를 들면 다음과 같습니다.

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

하지만 열 순서에 의존하는 것은 발생하기를 기다리는 버그입니다 (열 수만큼 변경 될 수 있음). 또한 SQL을 읽기 어렵게 만듭니다.

바로 가기 “-삽입하려는 테이블과 소스 데이터에 사용중인 쿼리 모두에 대한 열을 명시 적으로 나열해야합니다. 예 :

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

dbfiddle 여기

답변

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

동일한 표의 경우

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

답변

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; 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다