PostgreSQL: başka bir tablodan ekle


102

Başka bir tablodan bir tabloya veri eklemeye çalışıyorum ve tabloların ortak yalnızca bir sütunu var. Sorun şu ki, TABLE1'in null değerleri kabul etmeyen sütunları var, bu yüzden onları boş bırakamam ve TABLE2'den alamıyorum.

TABLE1 var: id, col_1 (boş değil), col_2 (boş değil), col_3 (boş değil)

ve TABLE2: id, col_a, col_b, col_c

Öyleyse TABLE2'den TABLE1'e id'i nasıl ekleyebilirim ve col_1-3'ü "data1", "data2", "data3" gibi sabit kodlu dizelerle nasıl doldurabilirim?

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

sonuçlanacak:

HATA: "col_1" sütunundaki boş değer, boş olmayan kısıtlamayı ihlal ediyor

Yanıtlar:


203

Sadece SELECT'te değişmez değerler sağlayın:

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

Bir seçim listesi herhangi bir değer ifadesini içerebilir :

Ancak seçim listesindeki ifadelerin, FROM yan tümcesinin tablo ifadesindeki herhangi bir sütuna başvurması gerekmez; örneğin sabit aritmetik ifadeler olabilirler.

Ve bir dize değişmezi kesinlikle bir değer ifadesidir.


4

Coalesce kullanabilirsiniz:

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

2

Çok geç cevap, ancak sanırım cevabım, kullanıcıların A tablosundaki verileri tablo B'ye basitçe eklemek (kopyalamak) istediği belirli kullanım durumları için daha basit:

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

0

Bilgi tutarlılığı için:

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'
       );
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.