PostgreSQL: вставка из другой таблицы

Я пытаюсь вставить данные в таблицу из другой таблицы и таблицы имеют только один столбец общего. Проблема в том, что в TABLE1 есть столбцы, которые не принимают значения null, поэтому я не могу оставить их пустыми, и я не могу получить их из TABLE2.

У меня есть TABLE1: id, col_1(не null), col_2 (не null), col_3 (не null)

и 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";

в результате:

ошибка: значение null в столбце "col_1" нарушает ограничение not-null

2 ответов


просто укажите литеральные значения в SELECT:

INSERT INTO TABLE1 (id, col_1, col_2, col_3)
SELECT id, 'data1', 'data2', 'data3'
FROM TABLE2
WHERE col_a = 'something';

список выбора может содержать любое значение выражения:

но выражения в списке выбора не должны ссылаться на какие-либо столбцы в табличном выражении предложения FROM; они могут быть постоянными арифметическими выражениями, например.

и строковый литерал, безусловно, является выражением значения.


вы можете использовать coalesce:

insert into destination select coalesce(field1,'somedata'),... from source;