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;