GROUP BY dans un UPDATE
Posté : 09 août 2007, 08:36
Bonjour,
Je souhaiterai faire une requête de ce genre :
Voici la structure de la table avec ses n-uplets :
Le problème est que le GROUP BY semble être interdit dans un UPDATE.
Le but de cette requête est de modifier le 'x' pour chaque type 'y' ayant le 'z' minimum (je sais pas si c'est clair !).
Si vous avez une solution, je l'accueille avec grand plaisir
Merci !
***
J'ai essayé de passer par les TABLE VIEW, ça ne fonctionne pas, je me suis ensuite lancé dans les TEMPORARY TABLE et là cela semble fonctionner (évidemment puisque du coup c'est une table différente...).
Mais si vous avez une solution qui ne nécessite pas de table temporaire, cela m'arrangerait 
Je souhaiterai faire une requête de ce genre :
Code : Tout sélectionner
UPDATE t1
SET x = x +1
GROUP BY y
ORDER BY z ASC
Voici la structure de la table avec ses n-uplets :
Code : Tout sélectionner
CREATE TABLE `t1` (
`x` INT NOT NULL ,
`y` INT NOT NULL ,
`z` INT NOT NULL AUTO_INCREMENT PRIMARY KEY
) ;
INSERT INTO `t1` (`x`, `y`, `z`) VALUES (0, 1, 1);
INSERT INTO `t1` (`x`, `y`, `z`) VALUES (0, 1, 2);
INSERT INTO `t1` (`x`, `y`, `z`) VALUES (0, 1, 3);
INSERT INTO `t1` (`x`, `y`, `z`) VALUES (0, 2, 4);
INSERT INTO `t1` (`x`, `y`, `z`) VALUES (0, 2, 5);
INSERT INTO `t1` (`x`, `y`, `z`) VALUES (0, 3, 6);
Le but de cette requête est de modifier le 'x' pour chaque type 'y' ayant le 'z' minimum (je sais pas si c'est clair !).
Si vous avez une solution, je l'accueille avec grand plaisir
Merci !
***
J'ai essayé de passer par les TABLE VIEW, ça ne fonctionne pas, je me suis ensuite lancé dans les TEMPORARY TABLE et là cela semble fonctionner (évidemment puisque du coup c'est une table différente...).
Code : Tout sélectionner
CREATE TEMPORARY TABLE t3 SELECT * FROM t1;
UPDATE t1 SET x = x +1 WHERE t1.z IN (
SELECT t3.z
FROM t3
GROUP BY t3.y
ORDER BY t3.z ASC
);