Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3079 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Requête UPDATE complexe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Requête UPDATE complexe

n°1615929
sire de Bo​tcor
Armorican way of life
Posté le 27-09-2007 à 12:11:06  profilanswer
 

Salut !
 
      Je travaille sur mySQL v4.
J'ai une table reglements qui contient entre autres :
- un identifiant (ID_REGLEMENT)
- un numéro (N_REGLEMENT)  
- un lien vers une autre entrée de la table règlement (ID_REGLEMENT_LIE) (parfois à null)
 
Ce que je voudrais, c'est que désormais les règlements reliés par le champ ID_REGLEMENT_LIE portent le même numéro.
Je ne sais pas si c'est possible de faire ça uniquement en SQL ?
 
 
j'essaie qq petites choses mais je sens bien que je vais dans la mauvaise direction :

Code :
  1. UPDATE reglements r1
  2. SET r1.N_REGLEMENT=(
  3. SELECT r2.N_REGLEMENT
  4. FROM reglements r2
  5. WHERE r2.ID_REGLEMENT=r1.ID_REGLEMENT_LIE
  6. )


ça me rend l'erreur :
#1093 - You can't specify target table 'reglements' for update in FROM clause

Message cité 1 fois
Message édité par sire de Botcor le 27-09-2007 à 12:13:23

---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
mood
Publicité
Posté le 27-09-2007 à 12:11:06  profilanswer
 

n°1615931
jpcheck
Pioupiou
Posté le 27-09-2007 à 12:16:34  profilanswer
 

ton r1 n'est pas connu dans ta sous requête...

n°1615932
sire de Bo​tcor
Armorican way of life
Posté le 27-09-2007 à 12:21:54  profilanswer
 

jpcheck a écrit :

ton r1 n'est pas connu dans ta sous requête...


Merci, je viens donc de tester ceci :

Code :
  1. UPDATE reglements r1
  2. SET r1.N_REGLEMENT=(
  3. SELECT r2.N_REGLEMENT
  4. FROM reglements r2
  5. JOIN reglements r1 ON r1.ID_REGLEMENT_LIE = r2.ID_REGLEMENT
  6. )


 
sans plus de succès :( (même erreur)


Message édité par sire de Botcor le 27-09-2007 à 12:22:46

---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
n°1615935
jpcheck
Pioupiou
Posté le 27-09-2007 à 12:30:01  profilanswer
 

en plus, ce qui semble foireux, c'est que si tu as plusieurs retours dans ta sous requête ca marchera jamais.
r1 et r2 sont la même table non ?
 
en fait je comprends pas le pb sinon, tu as le droit de faire un where dans ton update tu sais ?

n°1615939
casimimir
Posté le 27-09-2007 à 12:49:16  profilanswer
 

ce serait pas plutot?
 
 

Code :
  1. UPDATE reglements r1
  2. SET r1.N_REGLEMENT=(   
  3.    SELECT r2.N_REGLEMENT   
  4.    FROM reglements r2   
  5.    where r1.ID_REGLEMENT_LIE = r2.ID_REGLEMENT)

n°1615940
jpcheck
Pioupiou
Posté le 27-09-2007 à 12:51:05  profilanswer
 

ben il me semble que c'est ca qui lui pond une erreur...

n°1615941
casimimir
Posté le 27-09-2007 à 12:52:43  profilanswer
 

oops non c'est foireux,
vu que tu veux avoir le même numéro de règles tu dois n'en faire remonter qu'une, ca c'est a toi de décider laquelle par rapport a ton modèle, mais genre un max marcherait

n°1615959
sire de Bo​tcor
Armorican way of life
Posté le 27-09-2007 à 13:19:28  profilanswer
 

oui, r1 et r2 sont la même table
il n'y a pas 2 lignes avec le même ID_REGLEMENT_LIE
 
faire un where ? oui, mais je ne vois pas comment :(
 
merci casimimir, mais c'est ma requête de départ, ça ne fonctionne pas :/
 


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
n°1616066
sire de Bo​tcor
Armorican way of life
Posté le 27-09-2007 à 14:51:15  profilanswer
 

personne n'a une idée ?


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
n°1616129
pikti
I’ve done worse
Posté le 27-09-2007 à 16:14:13  profilanswer
 

UPDATE..FROM
 

sire de Botcor a écrit :


Code :
  1. UPDATE reglements
  2. SET N_REGLEMENT=r2.N_REGLEMENT
  3. FROM reglements r2
  4. WHERE ID_REGLEMENT_LIE = r2.ID_REGLEMENT




 
?

mood
Publicité
Posté le 27-09-2007 à 16:14:13  profilanswer
 

n°1616131
anapajari
s/travail/glanding on hfr/gs;
Posté le 27-09-2007 à 16:16:38  profilanswer
 

euh lire la doc ça aide :o

Citation :

Currently, you cannot update a table and select from the same table in a subquery.

n°1616239
MEI
|DarthPingoo(tm)|
Posté le 27-09-2007 à 17:29:12  profilanswer
 

jpcheck a écrit :

ton r1 n'est pas connu dans ta sous requête...


Si ça s'apelle une requete correllée. :o
 
EDIT : Meme si syntaxiquement elle est pas correcte.


Message édité par MEI le 27-09-2007 à 17:30:41

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1616242
sire de Bo​tcor
Armorican way of life
Posté le 27-09-2007 à 17:35:34  profilanswer
 

pikti a écrit :

UPDATE..FROM

Code :
  1. UPDATE reglements
  2. SET N_REGLEMENT=r2.N_REGLEMENT
  3. FROM reglements r2
  4. WHERE ID_REGLEMENT_LIE = r2.ID_REGLEMENT


?


 
 MySQL a répondu: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM reglements r2
   
      WHERE ID_REGLEMENT_LIE = r2.ID_REGLEMENT' at line 5
 
 :(


Message édité par sire de Botcor le 27-09-2007 à 17:36:37

---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
n°1616243
sire de Bo​tcor
Armorican way of life
Posté le 27-09-2007 à 17:37:49  profilanswer
 

anapajari a écrit :

euh lire la doc ça aide :o

Citation :

Currently, you cannot update a table and select from the same table in a subquery.



donc c'est impossible ?


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
n°1616252
MEI
|DarthPingoo(tm)|
Posté le 27-09-2007 à 17:50:37  profilanswer
 

Ceci dit a mon avis y'a aussi une grosse erreur de conception là dedans.
 
Car tu vas avoir apres ta requete :
ID | N | ID_LIE
1 | ABC | 2
2 | ABC | 1  
3 | DEF | null
 
Pourquoi avoir 2 n° qui pointe vers le meme reglement ? :o
Alors soit c'est le meme et tu le fusionne, soit s'en est deux et la faut les differencier mieux que ça ;)

Message cité 1 fois
Message édité par MEI le 27-09-2007 à 17:52:46

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1616332
sire de Bo​tcor
Armorican way of life
Posté le 27-09-2007 à 20:56:50  profilanswer
 

MEI a écrit :

Ceci dit a mon avis y'a aussi une grosse erreur de conception là dedans.
 
Car tu vas avoir apres ta requete :
ID | N | ID_LIE
1 | ABC | 2
2 | ABC | 1  
3 | DEF | null
 
Pourquoi avoir 2 n° qui pointe vers le meme reglement ? :o
Alors soit c'est le meme et tu le fusionne, soit s'en est deux et la faut les differencier mieux que ça ;)


c'est une demande précise du patron :o  :sweat:


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
n°1616442
MagicBuzz
Posté le 28-09-2007 à 09:45:00  profilanswer
 

sire de Botcor a écrit :


c'est une demande précise du patron :o  :sweat:


Ca me semble au contraire parfaitement logique...
 
J'ai une facture de 1000 € à payer.
Je demande à payer en 3 fois.
Il n'y a rien de particulier à garder un lien vers le premier versement, ça permet aisément de récupérer la liste de tous les règlements d'une même transaction.

n°1616444
MagicBuzz
Posté le 28-09-2007 à 09:46:24  profilanswer
 

Bon, sinon, vu la limitation de MySQL, je pense que t'es bon pour un script PHP ou autre, même si c'est du one shot.
 
Effectivement MySQL semble lever un verroux exclusif sur la table entière lors de la mise à jour (table lock au lieu de faire un row lock) et du coup il lui est impossible de lire en même temps dedans.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Requête UPDATE complexe

 

Sujets relatifs
[mySQL] Pbr de rapidité d'execution d'une requeteRequête MySQL qui fonctionne dans PhpMyAdmin mais pas dans mon script
Sql Developper Erreur non detectéAide pour une requête
Requêtes SQL: fusion de lignes[RESOLU] - Probleme requete SQL - RETURN
SQL Server 2005 - INSERT multiples[SQL SERVER 2005] types numeriques, question existentielle
Aide sur requete SQL avec variable PHP 
Plus de sujets relatifs à : [SQL] Requête UPDATE complexe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR