Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Administration
Administration Forum d'entraide sur l'administration de MySQL
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 04/04/2007, 14h14   #1
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Par défaut Update avec un select sur la même table

Bonjour,

Dans une application, avant d'effectuer une suppression de données dans une table, je génère un fichier de sauvegarde formaté sous forme d'INSERT afin de pouvoir facilement réinsérer les données en cas d'erreur ou de fausse manip.

Cependant, je rencontre un problème, c'est qu'il n'est pas possible de faire un SELECT dans la requête d'INSERT sur la même table.
La doc le précise :
http://dev.mysql.com/doc/refman/5.0/...ry-errors.html

Et comme il faut que je sélectionne la valeur max d'une colonne dans mon insertion, je suis un peu ennuyé.

La requête abrégée :
Code SQL :
1
2
3
INSERT INTO T1(id, titre, ordre) 
VALUES(3, 'le titre', 
(SELECT COALESCE(MAX(ordre), 1) + 1 FROM T1));

Me retourne donc cette erreur.

Quelqu'un connaitrait t-il une parade à cette lacune ?

Merci.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2007, 22h35   #2
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Bonsoir, je tente un petit up, au cas où quelqu'un aurait une idée.

Pour l'instant, j'ai trouvé une soluce en utilisant une variable utilisateur qui me permet de stocker le maximum de la colonne de la table, mais si une autre solution vous semble possible, je suis preneur
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2007, 00h16   #3
Futur Membre du Club
 
Inscription : avril 2007
Messages : 30
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 30
Points : 15
Points : 15
tu peux mettre un select dans un insert ex :

Code :
1
2
3
4
 
INSERT INTO T1(id, titre, ordre) 
SELECT(3, 'le titre',COALESCE(MAX(ordre), 1) + 1)
FROM t1
si si..
sorenson2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2007, 00h35   #4
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Elle n'est pas valide cette syntaxe
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2007, 12h08   #5
Futur Membre du Club
 
Inscription : avril 2007
Messages : 30
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 30
Points : 15
Points : 15
Oui il faut que tu mette le t1 en majuscule comme ceci :

Code :
1
2
3
4
INSERT INTO T1(id, titre, ordre) 
SELECT(3, 'le titre',COALESCE(MAX(ordre), 1) + 1)
FROM T1
sinon, je te garantis que la synthaxe est bonne et que l'on peut faire un select dans un insert. J'ai eut récemment à l'utiliser pour un traitement sur plusieurs tables. N'hésites pas à poursuivre dans cette direction.

sorenson2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2007, 16h40   #6
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Mais non elle n'est pas valide cette syntaxe.

Celle étant valide est celle que j'ai mise dans mon 1er post, et qui n'est pas possible de faire puisque INSERT et SELECT sur la même table.

Merci quand même
Xunil 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 01h21.


 
 
 
 
Partenaires

Hébergement Web