別のテーブルからテーブルにデータを挿入しようとしていますが、テーブルには共通の列が1つしかありません。問題は、TABLE1にはNULL値を受け入れない列があるため、空のままにできず、TABLE2から取得できないことです。
TABLE1:id、col_1(非ヌル)、col_2(非ヌル)、col_3(非ヌル)
およびTABLE2:id、col_a、col_b、col_c
どうすればidをTABLE2からTABLE1に挿入し、col_1-3に「data1」、「data2」、「data3」などのハードコードされた文字列を入力できますか?
INSERT INTO TABLE1 (id) SELECT id FROM TABLE2 WHERE col_a = "something";
結果として:
エラー:列「col_1」のヌル値は非ヌル制約に違反しています
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