PostgreSQL: แทรกจากตารางอื่น


102

ฉันกำลังพยายามแทรกข้อมูลไปยังตารางจากตารางอื่นและตารางมีเพียงคอลัมน์เดียวที่เหมือนกัน ปัญหาคือ TABLE1 มีคอลัมน์ที่ไม่ยอมรับค่า null ดังนั้นฉันจึงไม่สามารถปล่อยให้ว่างเปล่าและฉันไม่สามารถรับจาก TABLE2 ได้

ฉันมี TABLE1: 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" ละเมิดข้อ จำกัด ที่ไม่เป็นค่าว่าง

คำตอบ:


203

เพียงระบุค่าตัวอักษรใน SELECT:

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

รายการที่เลือกสามารถมีนิพจน์ค่าใดก็ได้ :

แต่นิพจน์ในรายการเลือกไม่จำเป็นต้องอ้างอิงคอลัมน์ใด ๆ ในนิพจน์ตารางของส่วนคำสั่ง FROM พวกเขาสามารถเป็นนิพจน์เลขคณิตคงที่ได้เช่น

และสตริงลิเทอรัลเป็นนิพจน์ค่าอย่างแน่นอน



2

คำตอบที่ช้ามาก แต่ฉันคิดว่าคำตอบของฉันตรงไปตรงมามากขึ้นสำหรับกรณีการใช้งานเฉพาะที่ผู้ใช้ต้องการเพียงแค่แทรก (คัดลอก) ข้อมูลจากตาราง A ลงในตาราง 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'
       );
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.