2011-08-01 16 views
61

Estoy tratando de insertar datos en una tabla desde otra tabla y las tablas tienen solo una columna en común. El problema es que TABLE1 tiene columnas que no aceptarán valores nulos, así que no puedo dejarlas vacías y no puedo obtenerlas de TABLE2.PostgreSQL: insertar desde otra tabla

tengo Tabla 1: Identificación, col_1 (no nula), col_2 (no nula), col_3 (no nulo)

y TABLA2: Identificación, col_a, col_b, col_c

así que ¿cómo podría Inserté id de TABLA2 a TABLA1 y llené col_1-3 con cadenas codificadas como "datos1", "datos2", "datos3"?

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

se traducirá en:

ERROR: null value in column "col_1" violates not-null constraint

Respuesta

128

apenas suministra valores literales en el SELECT:

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

Una lista de selección puede contener any value expression:

But the expressions in the select list do not have to reference any columns in the table expression of the FROM clause; they can be constant arithmetic expressions, for instance.

Y una cadena literal es sin duda un valor expresión.

4

Usted podría utilizar fusionan:

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