PostgreSQL: chèn từ bảng khác


101

Tôi đang cố gắng chèn dữ liệu vào một bảng từ một bảng khác và các bảng chỉ có một cột chung. Vấn đề là TABLE1 có các cột sẽ không chấp nhận giá trị null vì vậy tôi không thể để chúng trống và tôi không thể lấy chúng từ TABLE2.

Tôi có TABLE1: id, col_1 (not null), col_2 (not null), col_3 (not null)

và TABLE2: id, col_a, col_b, col_c

vậy làm cách nào tôi có thể chèn id từ TABLE2 sang TABLE1 và điền vào col_1-3 bằng các chuỗi mã cứng như "data1", "data2", "data3"?

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

sẽ cho kết quả:

LỖI: giá trị null trong cột "col_1" vi phạm ràng buộc not-null

Câu trả lời:


202

Chỉ cần cung cấp các giá trị theo nghĩa đen trong SELECT:

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

Một danh sách được chọn có thể chứa bất kỳ biểu thức giá trị nào :

Nhưng các biểu thức trong danh sách chọn không phải tham chiếu đến bất kỳ cột nào trong biểu thức bảng của mệnh đề FROM; chẳng hạn chúng có thể là các biểu thức số học không đổi.

Và một chuỗi ký tự chắc chắn là một biểu thức giá trị.


4

Bạn có thể sử dụng liên kết:

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

2

Câu trả lời rất muộn, nhưng tôi nghĩ câu trả lời của tôi dễ hiểu hơn cho các trường hợp sử dụng cụ thể mà người dùng chỉ muốn chèn (sao chép) dữ liệu từ bảng A vào bảng B:

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

0

Đối với tích phân tham chiếu:

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'
       );
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.