PostgreSQL: вставити з іншої таблиці


101

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

У мене є TABLE1: id, col_1 (не null), col_2 (не null), col_3 (not null)

і TABLE2: id, col_a, col_b, col_c

тож як я можу вставити ідентифікатор з TABLE2 до TABLE1 і заповнити col_1-3 жорсткими кодованими рядками типу "data1", "data2", "data3"?

INSERT INTO TABLE1 (id) SELECT id FROM TABLE2 WHERE col_a = "something";

це призведе до:

ПОМИЛКА: нульове значення у стовпці "col_1" порушує ненульове обмеження

Відповіді:


202

Просто введіть буквальні значення в SELECT:

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

Список вибору може містити будь-який вираз значення :

Але вирази у списку вибору не повинні посилатися на жодні стовпці у виразі таблиці пункту FROM; наприклад, це можуть бути постійні арифметичні вирази.

А рядковий буквал - це, безумовно, вираження значення.



2

Дуже пізня відповідь, але я думаю, що моя відповідь є більш зрозумілою для конкретних випадків використання, коли користувачі хочуть просто вставити (скопіювати) дані з таблиці А в таблицю B:

INSERT INTO table_b (col1, col2, col3, col4, col5, col6)
SELECT col1, 'str_val', int_val, col4, col5, col6
FROM table_a

0

Для референтної цілісності:

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'
       );
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.