Bonjour à tous.

Je vous expose la situation.
J'ai une table avec des communes.
Certain noms de communes doivent être modifiés. Je dois placer l'article défini (Le, La, Les, Aux, L', Los) au début du nom, et pas à la fin comme c'est le cas actuellement.

Voici la table de tests et un jeu d'essais :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE communes (
    id int(11) default NULL,
    nom varchar(200) default NULL,
    cp varchar(200) default NULL,
    lat double default NULL,
    longi double default NULL,
   IDDepartement int(11) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
INSERT INTO communes (id, nom) VALUES 
(1001, 'Abergement-Clémenciat (L'')'),
(1002, 'Abergement-de-Varey (L'')'),
(1049, 'Boisse (La)'),
(1066, 'Burbanche (La)'),
(1085, 'Chapelle-du-Châtelard (La)'),
(1176, 'Grand-Abergement (Le)'),
(1260, 'Montellier (Le)'),
(1274, 'Neyrolles (Les)');
Je doit donc modifier 'Boisse (La)' en 'La Boisse', etc..
Contrainte supplémentaire, modifier 'Abergement-de-Varey (L')' en 'L'Abergement-de-Varey' (pas d'espace entre l'article et le nom).

J'ai réussi à reconstituer le bon nom de commune avec cette requête :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SELECT CONCAT(prefixe,
              space(
                  CASE lettre
                    WHEN "'" THEN 0
                    ELSE 1
                  END
               ),
              nomSansPrefixe), id
FROM (
	SELECT id, nom,
	  SUBSTRING(nom FROM 1 FOR ouvrante-2) AS nomSansPrefixe,
	  SUBSTRING(nom FROM ouvrante+1 FOR nbCaractere) AS prefixe,
	  right(SUBSTRING(nom FROM ouvrante+1 FOR nbCaractere), 1) AS lettre,
	  ouvrante, fermante, nbCaractere
	FROM (
		select id, nom,
		  LOCATE('(',nom) AS ouvrante,
		  LOCATE(')',nom) AS fermante,
		  (LOCATE(')',nom)-1)-LOCATE('(',nom) AS nbCaractere
		from communes
		where LOCATE('(',nom)<>0
	) AS td
	where nbCaractere<4
) AS test
Résultat :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
L'Abergement-Clémenciat  	1001
L'Abergement-de-Varey 	        1002
La Boisse 	                1049
La Burbanche 	                1066
La Chapelle-du-Châtelard 	1085
Donc, maintenant je n'arrive pas à transformer ce SELECT en UPDATE pour mettre à jour la colonne 'nom'.

Est-ce que vous pourriez me donner une piste pour placer la contrainte de sélection pour lier l'id dans mon SELECT et l'id de la table à mettre à jour (UPDATE) ?

Merci,
A+

Edit:
J'ai trouvé, il suffit d'utiliser la syntaxe de jointure de MySQL:
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
UPDATE t1, t2
SET t1.col=t2.col
WHERE t1.id=t2.id
t2 étant une table dérivée contenant la requête plus haut.
Elle à l'air très longue à exécuter, je la lanceré ce soir.