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 21/01/2009 12:00:43

jonathan
Membre

update qui renvoie plus d'une ligne

Bonjour, je tente une requète de type

update table1 set champ1 = (select champ2 from table2 a, table1 b where a.id = b.id)

cependant j'obtiens une erreur

ERREUR:  plus d'une ligne renvoyée par une sous-requête utilisée comme une expression

Comment puis je faire autrement ou quelle est mon erreur ?

Merci d'avance pour votre aide.

Hors ligne

#2 21/01/2009 15:33:04

gleu
Administrateur

Re : update qui renvoie plus d'une ligne

Je suppose que le but de la requête est de placer champ2 de la table table2 dans champ1 de la table table1. Il serait mieux d'écrire la requête ainsi :

UPDATE table1 SET  champs1=champ2 FROM table2 WHERE table1.id=table2.id;

Guillaume.

Hors ligne

#3 21/01/2009 15:40:34

flo
Membre

Re : update qui renvoie plus d'une ligne

Lorsque tu fais un update, tu cherches à mettre à jour ta colonne avec une valeur donnée.
Par exemple :
update employes set salaire = 1000;
(tu mets tous les salaires de la table employes à 1000)
ou bien :
update employes set salaire = 1000 where nom = 'Dupont';
(tu mets à jour le salaire de tous les employés dont le nom est 'Dupont').

Dans le cas que tu nous donnes, la valeur est le résultat de la sous-requête : select champ2 from table2 a, table1 b where a.id = b.id
Or cette sous-requête ramène probablement plusieurs lignes, d'où l'erreur...

Si tu n'arrives pas à trouver comment résoudre le problème, il faudrait que tu donnes ta requête réelle (ou une requête similaire, mais parlante) et que tu nous explique ce que tu cherches à faire.
Cherches-tu à mettre à copier la valeur de table2.champ2 dans table1.champ1, en faisant le lien sur l'identifiant?

Hors ligne

#4 21/01/2009 17:09:24

jonathan
Membre

Re : update qui renvoie plus d'une ligne

Merci pour vos réponses.

Cherches-tu à mettre à copier la valeur de table2.champ2 dans table1.champ1, en faisant le lien sur l'identifiant?

Je suppose que le but de la requête est de placer champ2 de la table table2 dans champ1 de la table table1

oui c'est bien ca.

Je veux pouvoir récupérer plusieurs valeurs. Je travail avec une solution alternative pour le moment. Je testerai ta requête prochainement gleu.

Merci

Hors ligne

Pied de page des forums