2011-08-01 4 views
61

J'essaie d'insérer des données dans une table d'une autre table et les tables n'ont qu'une seule colonne en commun. Le problème est que le TABLE1 a des colonnes qui n'accepteront pas les valeurs nulles, donc je ne peux pas les laisser vides et je ne peux pas les obtenir à partir du TABLE2.PostgreSQL: insertion depuis une autre table

je Tableau 1: id, col_1 (non null), col_2 (non nul), col_3 (non null)

et Table2: id, col_a, col_b, col_c

alors comment pourrait J'insère l'ID de TABLE2 à TABLE1 et remplis le col_1-3 avec des chaînes codées en dur comme "data1", "data2", "data3"?

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

se traduira par:

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

Répondre

128

fournissent juste valeur littérale dans le SELECT:

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

Une liste de sélection peut contenir 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.

Et une chaîne littéral est certainement une valeur expression.

4

Vous pouvez utiliser soudent:

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