it-swarm.com.de

PostgreSQL: Einfügen aus einer anderen Tabelle

Ich versuche, Daten aus einer anderen Tabelle in eine Tabelle einzufügen, und die Tabellen haben nur eine Spalte gemeinsam. Das Problem ist, dass die TABELLE1 Spalten hat, die keine Nullwerte akzeptieren, so dass ich sie nicht leer lassen und sie nicht aus der TABELLE2 abrufen kann.

Ich habe TABELLE1: id, col_1 (nicht null), col_2 (nicht null), col_3 (nicht null)

und TABELLE 2: id, col_a, col_b, col_c

wie könnte ich also die ID von TABELLE2 in TABELLE1 einfügen und die Spalte_1-3 mit fest codierten Zeichenfolgen wie "data1", "data2", "data3" füllen?

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

wird darin enden, dass:

FEHLER: Der Nullwert in Spalte "col_1" verletzt die Nicht-Null-Bedingung

86
Seerumi

Geben Sie einfach Literalwerte in SELECT ein:

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

Eine Auswahlliste kann einen beliebigen Werteausdruck enthalten:

Die Ausdrücke in der Auswahlliste müssen jedoch keine Spalten im Tabellenausdruck der FROM-Klausel referenzieren. Dies können beispielsweise konstante arithmetische Ausdrücke sein.

Und ein String-Literal ist sicherlich ein Werteausdruck.

171
mu is too short

Sie könnten Koaleszieren verwenden:

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

Sehr späte Antwort, aber ich denke, meine Antwort ist einfacher für bestimmte Anwendungsfälle, in denen Benutzer einfach Daten aus Tabelle A in Tabelle B einfügen (kopieren) möchten:

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