Я пытаюсь вставить данные в таблицу из другой таблицы, а таблицы имеют только один столбец. Проблема заключается в том, что в таблице TABLE1 есть столбцы, которые не будут принимать значения NULL, поэтому я не могу оставить их пустыми, и я не могу получить их из TABLE2.
У меня ТАБЛИЦА 1:
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";
приведет к:
ОШИБКА: нулевое значение в столбце "col_1" нарушает непустое ограничение
Ответ 1
Просто введите литеральные значения в SELECT:
INSERT INTO TABLE1 (id, col_1, col_2, col_3)
SELECT id, 'data1', 'data2', 'data3'
FROM TABLE2
WHERE col_a = 'something';
Список выбора может содержать любое выражение выражения:
Но выражения в списке выбора не должны ссылаться на любые столбцы в выражении таблицы предложения FROM; они могут быть, например, постоянными арифметическими выражениями.
И строковый литерал, безусловно, является выражением ценности.
Ответ 2
Вы можете использовать coalesce:
insert into destination select coalesce(field1,'somedata'),... from source;
Ответ 3
Ответ очень поздний, но я думаю, что мой ответ более прямолинеен для конкретных случаев, когда пользователи хотят просто вставить (скопировать) данные из таблицы A в таблицу B:
INSERT INTO table_b (col1, col2, col3, col4, col5, col6)
SELECT col1, 'str_val', int_val, col4, col5, col6
FROM table_a