J'essaie d'insérer des données dans une table à partir d'une autre table et les tables n'ont qu'une seule colonne en commun. Le problème est que la TABLE1 a des colonnes qui n'acceptent pas les valeurs NULL. Je ne peux donc pas les laisser vides et je ne peux pas les obtenir à partir de la TABLE2.
J'ai TABLE1: id, col_1 (non nul), col_2 (non nul), col_3 (non nul)
et TABLE2: id, col_a, col_b, col_c
alors, comment pourrais-je insérer id de TABLE2 à TABLE1 et remplir la colonne_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";
aura pour résultat:
ERREUR: la valeur null dans la colonne "col_1" viole la contrainte non nulle
Fournissez simplement des valeurs littérales 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 toute expression de valeur :
Toutefois, les expressions de la liste de sélection ne doivent référencer aucune colonne dans l'expression de table de la clause FROM; ils peuvent être des expressions arithmétiques constantes, par exemple.
Et un littéral de chaîne est certainement une expression de valeur.
Vous pouvez utiliser coalesce:
insert into destination select coalesce(field1,'somedata'),... from source;
Réponse très tardive, mais je pense que ma réponse est plus simple pour des cas d'utilisation spécifiques où les utilisateurs veulent simplement insérer (copier) des données du tableau A dans le tableau B:
INSERT INTO table_b (col1, col2, col3, col4, col5, col6)
SELECT col1, 'str_val', int_val, col4, col5, col6
FROM table_a