다른 테이블의 테이블에 데이터를 삽입하려고하는데 테이블에는 공통 열이 하나만 있습니다. 문제는 TABLE1에 null 값을 허용하지 않는 열이 있으므로 비워 둘 수 없으며 TABLE2에서 가져올 수 없다는 것입니다.
나는 TABLE1이 있습니다 : id, col_1 (null 아님), col_2 (null 아님), col_3 (널 아님)
및 TABLE2 : id, col_a, col_b, col_c
그래서 어떻게 TABLE2의 id를 TABLE1에 삽입하고 “data1”, “data2”, “data3″과 같은 하드 코딩 된 문자열로 col_1-3을 채울 수 있습니까?
INSERT INTO TABLE1 (id) SELECT id FROM TABLE2 WHERE col_a = "something";
결과 :
오류 : “col_1″열의 null 값이 null이 아닌 제약 조건을 위반합니다.
답변
SELECT에 리터럴 값을 제공하십시오.
INSERT INTO TABLE1 (id, col_1, col_2, col_3)
SELECT id, 'data1', 'data2', 'data3'
FROM TABLE2
WHERE col_a = 'something';
선택 목록에는 모든 값 표현식이 포함될 수 있습니다 .
그러나 선택 목록의 식은 FROM 절의 테이블 식에있는 열을 참조 할 필요가 없습니다. 예를 들어 상수 산술식이 될 수 있습니다.
그리고 문자열 리터럴은 확실히 값 표현식입니다.
답변
병합을 사용할 수 있습니다.
insert into destination select coalesce(field1,'somedata'),... from source;
답변
매우 늦은 답변이지만 사용자가 테이블 A의 데이터를 테이블 B에 삽입 (복사)하려는 특정 사용 사례에 대해서는 내 대답이 더 간단하다고 생각합니다.
INSERT INTO table_b (col1, col2, col3, col4, col5, col6)
SELECT col1, 'str_val', int_val, col4, col5, col6
FROM table_a
답변
참조 무결성 :
insert into main_tbl (col1, ref1, ref2, createdby)
values ('col1_val',
(select ref1 from ref1_tbl where lookup_val = 'lookup1'),
(select ref2 from ref2_tbl where lookup_val = 'lookup2'),
'init-load'
);