Requête UPDATE complexe [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 27-09-2007 à 12:16:34
ReplyMarsh Posté le 27-09-2007 à 12:21:54
jpcheck a écrit : ton r1 n'est pas connu dans ta sous requête... |
Merci, je viens donc de tester ceci :
Code :
|
sans plus de succès (même erreur)
Marsh Posté le 27-09-2007 à 12:30:01
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 ?
Marsh Posté le 27-09-2007 à 12:49:16
ce serait pas plutot?
Code :
|
Marsh Posté le 27-09-2007 à 12:52:43
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
Marsh Posté le 27-09-2007 à 13:19:28
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
Marsh Posté le 27-09-2007 à 14:51:15
personne n'a une idée ?
Marsh Posté le 27-09-2007 à 16:14:13
UPDATE..FROM
sire de Botcor a écrit :
|
?
Marsh Posté le 27-09-2007 à 17:29:12
jpcheck a écrit : ton r1 n'est pas connu dans ta sous requête... |
Si ça s'apelle une requete correllée.
EDIT : Meme si syntaxiquement elle est pas correcte.
Marsh Posté le 27-09-2007 à 17:35:34
pikti a écrit : UPDATE..FROM
|
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
Marsh Posté le 27-09-2007 à 17:37:49
anapajari a écrit : euh lire la doc ça aide
|
donc c'est impossible ?
Marsh Posté le 27-09-2007 à 17:50:37
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 ?
Alors soit c'est le meme et tu le fusionne, soit s'en est deux et la faut les differencier mieux que ça
Marsh Posté le 27-09-2007 à 20:56:50
MEI a écrit : Ceci dit a mon avis y'a aussi une grosse erreur de conception là dedans. |
c'est une demande précise du patron
Marsh Posté le 28-09-2007 à 09:45:00
sire de Botcor a écrit : |
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.
Marsh Posté le 28-09-2007 à 09:46:24
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.
Marsh Posté le 27-09-2007 à 12:11:06
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 :
ça me rend l'erreur :
#1093 - You can't specify target table 'reglements' for update in FROM clause
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