Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2012, 15h06   #1
Invité régulier
 
Homme tom
Étudiant
Inscription : janvier 2012
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme tom
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 13
Points : 6
Points : 6
Par défaut Update et sous-requête renvois

Bonjour,
Je me presente je m'appelle thomas et je suis etudiant en informatique.
Pour un projet je dois effectuer des manipulations dans une base de données.

Je dois mettre à jour toute un colonne avec les valeur qui corresponde à une somme d'une autre table

je met le code pour etre plus explicite

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
UPDATE Histocommande
SET 
Histocommande.result=(SELECT SUM(histoarticle.montant1+histoarticle.montant2)
FROM 
histoarticle,
commandearticle,
Commande,
article,
Histocommande
WHERE 
Histoarticle.etat=30
AND histoarticle.bool=1
AND histoarticle.id=aticle.id
AND article.id=commandearticle.id
AND commandearticle.idcmd=Commande.idcmd 
AND Commande.idcmd = Histocommande.idcmd
GROUP BY Commande.idcmd)
La requete me donne ça =Msg*512, Niveau*16, État*1, Ligne*1
La sous-requête a retourné plusieurs valeurs. Cela n'est pas autorisé quand la sous-requête suit =, !=, <, <= , >, >= ou quand elle est utilisée en tant qu'expression.
L'instruction a été arrêtée.

Est-ce que quelqu'un aurait une idée de où ça peut bien venir svp?
thomaslouf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 15h15   #2
Membre éclairé
 
Avatar de hariman
 
Homme Luc Hariman RANDRIANOMENJANAHARY
Développeur Java
Inscription : janvier 2008
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Luc Hariman RANDRIANOMENJANAHARY
Localisation : Ile Maurice

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2008
Messages : 175
Points : 349
Points : 349
Envoyer un message via MSN à hariman Envoyer un message via Skype™ à hariman
Bonjour,

Ce résultat à plusieurs valeurs vient de la clause "GROUP BY".
La sous-requête retourne la liste des sommes pour chaque "idcmd".

Modifie ta sous-requête de sorte qu'elle ne retourne que la somme correspondant à l'idcmd de la requête UPDATE (ajoute un WHERE dans la requête UPDATE)
__________________
Les boutons et adorent être cliqués, donc ne les oubliez pas
hariman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 15h31   #3
Invité régulier
 
Homme tom
Étudiant
Inscription : janvier 2012
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme tom
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 13
Points : 6
Points : 6
Par défaut reponse

C'est ce que je viens de faire, mais le problème il me dit que ce n'est pas lié, alors j'ai mis un FROM mais la il me renvois la même erreur.

Le lien dans le where ça peut etre quoi?

Citation:
Modifie ta sous-requête de sorte qu'elle ne retourne que la somme correspondant à l'idcmd de la requête UPDATE (ajoute un WHERE dans la requête UPDATE)
Ce que je veux faire c'est mettre à jour les montants de Histocommande.result pour les differents idcmd, ils sont chacuns différents.
thomaslouf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 15h32   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il ne faut pas remettre la table HistoCommande dans la sous-requête, sinon vous ne faites pas la corrélation entre la mise à jour et la sous-requête.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/01/2012, 15h42   #5
Invité régulier
 
Homme tom
Étudiant
Inscription : janvier 2012
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme tom
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 13
Points : 6
Points : 6
Si je ne met pas le lien dans le WHERE de la sous requête il ne saura pas où aller?
thomaslouf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 15h45   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Je n'ai pas parlé du lien dans le WHERE, j'ai parlé de la table.
Il faut conserver le lien, qui fera la corrélation entre la table mise à jour HistoCommande et la sous-requête.

Si c'est plus clair avec des images, actuellement votre requête fonctionne ainsi comme dans l'image Update_1.
Votre sous-requête est indépendante de la mise à jour, et renvoie les résultats pour tous les idcmd, ce qui provoque l'erreur.

En supprimant la référence à HistoCommande dans la sous-requête, mais en gardant l'égalité, la sous-requête devient corrélée à la table mise à jour, cf. l'image Update_2, et ne travaille que sur l'idcmd courant.
À ce titre, le GROUP BY de la sous-requête devient inutile.
Images attachées
Type de fichier : png update_1.png (22,8 Ko, 6 affichages)
Type de fichier : png update_2.png (30,2 Ko, 6 affichages)
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/01/2012, 15h56   #7
Invité régulier
 
Homme tom
Étudiant
Inscription : janvier 2012
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme tom
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 13
Points : 6
Points : 6
Oula, je me suis embrouillé pardon et oui effectivement ça à fonctionné.
Merci,toutes mes valeurs sont maintenant à jours!!! merci beaucoup
thomaslouf est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h45.


 
 
 
 
Partenaires

Hébergement Web