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 :
Je doit donc modifier 'Boisse (La)' en 'La Boisse', etc..
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)');
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 :
Résultat :
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
Donc, maintenant je n'arrive pas à transformer ce SELECT en UPDATE pour mettre à jour la colonne 'nom'.
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
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:
t2 étant une table dérivée contenant la requête plus haut.
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
Elle à l'air très longue à exécuter, je la lanceré ce soir.






Répondre avec citation
Partager