Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
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 25/01/2005, 00h36   #1
Candidat au titre de Membre du Club
 
Inscription : septembre 2004
Messages : 46
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 46
Points : 13
Points : 13
Par défaut ERREUR d'UPDATE : Multiple rows in singleton select

Je veux modifier un champ PERIODE ( CHAR(1) ) dans une table RESULTAT à l'aide d'une table BILANS ( une seule colonne de champs DATE unique) pour chaque valeur de date de la premiére ( DATEDEM : Timestamp ) correspondant à une valeur contenue dans la seconde.

Code :
1
2
3
4
5
6
7
 
UPDATE "RESULTAT"
SET "PERIODE" = 'M'
WHERE "DATEDEM" = (
SELECT D1.DATEDEM FROM "BILANS" D , "RESULTAT" D1
  WHERE D.DB = CAST(D1.DATEDEM AS DATE)
)
et j'obtiens... l'erreur SQL :
Citation:
Multiple rows in singleton select
même erreur si j'écris:
Code :
1
2
3
4
5
6
7
 
UPDATE "RESULTAT"
SET "PERIODE" = 'M'
WHERE CAST(DATEDEM AS DATE) = (
SELECT D.DB FROM "BILANS" D , "RESULTAT" D1
  WHERE D.DB = CAST(D1.DATEDEM AS DATE)
)
Merci de votre aide !

:
Papino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2005, 10h01   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Le message veux dire que votre sous select renvoit plusieurs valeurs.
Essayez
Code :
1
2
SELECT D.DB FROM "BILANS" D , "RESULTAT" D1 
  WHERE D.DB = CAST(D1.DATEDEM AS DATE
Vous verrez qu'il y a bien une liste de valeur !

Or le = n'accepte qu'une seule valeur de chaque coté pour tester l'égalitée.

Et donc un XXXX = (select...) va bien fonctionner uniquement si le select ... renvoie qu'une seule valeur.

Si vous voulez mettre à jours tous vos enregistrements dont la DATEDEM se trouve dans la liste fournie par un select il ne faut pas utiliser le = mais le prédicat IN.


Code :
1
2
3
4
5
6
UPDATE "RESULTAT" 
SET "PERIODE" = 'M' 
WHERE "DATEDEM" IN ( 
SELECT D1.DATEDEM FROM "BILANS" D , "RESULTAT" D1 
  WHERE D.DB = CAST(D1.DATEDEM AS DATE) 
)
Mais je ne sais pas si c'est bien ça que vous souhaitez.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2005, 10h03   #3
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
A bien lire l'erreur, je pense que ton SELECT renvoie plusieurs valeurs...

Si tu veux effectivement mettre à jour toutes les occurrences de RESULTAT correspondant au critère, il faut coder :

Code :
1
2
3
4
5
6
7
8
9
 
UPDATE "RESULTAT" 
SET "PERIODE" = 'M' 
WHERE "DATEDEM"
 IN
 ( 
SELECT D1.DATEDEM FROM "BILANS" D , "RESULTAT" D1 
  WHERE D.DB = CAST(D1.DATEDEM AS DATE) 
)
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2005, 12h31   #4
Candidat au titre de Membre du Club
 
Inscription : septembre 2004
Messages : 46
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 46
Points : 13
Points : 13
Merci de vos réponses
... et de votre parfaite pédagogie !
Papino 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 09h27.


 
 
 
 
Partenaires

Hébergement Web