PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 22/02/2013 01:33:21

colleter
Membre

coller enregistrement d'une ligne dans une autre

Bonjour,
j'ai une table avec plusieurs enregistrements et je souhaiterai copier des valeurs de variables pour une ligne dans une autre ligne. J'ai tente plusieurs choses dt l'idee est:
insert into models_list (author,contact,model_year_begin,model_year_end) where model_number=335 values
(select author,contact,model_year_begin,model_year_end from models_list where model_number=252);

mais ca ne marche pas.
Avez-vous une idee pour resoudre ce probleme?

merci

Hors ligne

#2 22/02/2013 10:47:59

rjuju
Administrateur

Re : coller enregistrement d'une ligne dans une autre

Bonjour,

Cette requête vous convient ?


INSERT INTO models_lists  (model_number,author,contact,model_year_begin,model_year_end) SELECT 355,author,contact,model_year_begin,model_year_end from models_list where model_number=252

Hors ligne

#3 22/02/2013 19:14:58

colleter
Membre

Re : coller enregistrement d'une ligne dans une autre

hello,
c'est parfait, ca marche!
merci beaucoup pour le coup de main
Mat

Hors ligne

#4 26/02/2013 00:33:23

colleter
Membre

Re : coller enregistrement d'une ligne dans une autre

en fait, la requete ne me convient pas car je ne souhaite pas creer de nouvel enregistrement mais coller ds une ligne deja existante des valeurs de variables provenant d'une autre ligne deja existante.
Ainsi dans la requete que vous m'envoyez:
INSERT INTO models_lists  (model_number,author,contact,model_year_begin,model_year_end) SELECT 355,author,contact,model_year_begin,model_year_end from models_list where model_number=252

je ne veux pas creer de nouvel enregistrement 355 mais importer de l'enregistrement 252 les valeurs des variables author,contact,model_year_begin,model_year_end dans l'enregistrement 355 (une sorte de copier/coller de certaines variables d'une ligne a une autre). Sachant que model_number est ma cle primaire, si j'applique votre requete, cela viole la contrainte de cle primaire.

Auiez-vous la solution?
Merci

Hors ligne

#5 26/02/2013 17:48:21

gleu
Administrateur

Re : coller enregistrement d'une ligne dans une autre

Pour mettre à jour une ligne, il faut faire un UPDATE.


Guillaume.

Hors ligne

#6 28/02/2013 02:41:33

colleter
Membre

Re : coller enregistrement d'une ligne dans une autre

Bonjour,
ok j'ai fait un update:
update models_list set sum_all_consumption=(select sum_all_consumption from models_list where model_number=15) where model_number=355;
et ca marche

mais pour plusieurs variables, ca ne marche pas:
UPDATE models_list SET (sum_all_consumption,sum_all_exports,sum_all_resp_flows) = (SELECT sum_all_consumption,sum_all_exports,sum_all_resp_flows FROM models_list WHERE model_number=15) WHERE model_number=355;

ca me renvoit: ERREUR:  erreur de syntaxe sur ou près de « SELECT »
LINE 1: ...onsumption,sum_all_exports,sum_all_resp_flows) = (SELECT sum...
                                                             ^


********** Error **********

ERREUR: erreur de syntaxe sur ou près de « SELECT »
SQL state: 42601
Character: 84

je pense qu'il s'agit d'un truc a la con lie a une parenthese mais apres plusieurs tests pas de solution.
Pourriez-vous m'indiquer ou se trouve la boulette et comment la resoudre please?
merci

Hors ligne

#7 28/02/2013 21:19:01

gleu
Administrateur

Re : coller enregistrement d'une ligne dans une autre

La syntaxe est mauvaise. Essayez plutôt ceci :

UPDATE models_list SET
  sum_all_consumption = copie.sum_all_consumption,
  sum_all_exports = copie.sum_all_exports,
  sum_all_resp_flows = copie.sum_all_resp_flows
FROM models_list copie
WHERE copie.model_number=15
AND models_list.model_number=355;

Guillaume.

Hors ligne

Pied de page des forums