PostgreSQL: вставка из другой таблицы
Я пытаюсь вставить данные в таблицу из другой таблицы и таблицы имеют только один столбец общего. Проблема в том, что TABLE1 имеет столбцы, которые не принимают нулевые значения, поэтому я не могу оставить их пустыми, и я не могу получить их из TABLE2.
У меня есть TABLE1: идентификатор, col_1 (не null), col_2(не нуль), col_3 (не null)
и TABLE2: идентификатор столбец col_a, col_b, col_c
так как я могу вставить id из таблицы 2 в таблицу 1 и заполнить 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; они могут быть, например, постоянными арифметическими выражениями.
и строковый литерал, безусловно, является выражением значения.