Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels 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 06/02/2012, 14h16   #1
 
Inscription : février 2012
Messages : 2
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 2
Points : -1
Points : -1
Par défaut requête UPDATE pour deux tables

Bonjour la communauté.

J'ai deux tables.
table 1 : appartements_Lr avec un champ nat_mut. Dans ce champ on y trouve des abréviations (AN, VG, ...)

table 2 : nature_mutation avec deux champs nat_muta (on y retrouve les abreviations) et un champ nature (on y retrouve les significations de ces abréviations).

L'idée est que j'aimerai récupérer les significations de ces abréviations dans ma première table (appartements_Lr)

J'ai beau parcourir le forum et essayer des solutions cela ne fonctionne pas.

Voici ma requête qui ne fonctionne pas :

Code :
1
2
3
4
UPDATE appartements_LR
SET nat_mut=nature_mutation.nature
FROM appartements_LR,nature_mutation
WHERE nature_mutation.nat_muta=appartements_LR.nat_mut
Quelqun aurait une idée ? Merci de votre aide.
Lancelot du Lac35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 14h33   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 030
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 030
Points : 18 334
Points : 18 334
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par Lancelot du Lac35 Voir le message
J'ai deux tables.
table 1 : appartements_Lr avec un champ nat_mut. Dans ce champ on y trouve des abréviations (AN, VG, ...)

table 2 : nature_mutation avec deux champs nat_muta (on y retrouve les abreviations) et un champ nature (on y retrouve les significations de ces abréviations).
Si toutes les abréviations ne font que deux lettres et que la clé primaire comme la clé étrangère sont toutes deux sur des colonnes de type CHAR(2) on peut accepter cette structure mais, d'une manière générale, une clé textuelle est une mauvaise clé.
Ici en particulier, il vaut mieux être sûr que ces codes ne changeront jamais.

Citation:
L'idée est que j'aimerai récupérer les significations de ces abréviations dans ma première table (appartements_Lr)
Mauvaise idée !
Si c'est pour tout réunir dans une seule table, autant utiliser un tableur !

Avec une vue qui fait une jointure sur les deux tables c'est très facile de récupérer les informations voulues.

Code :
1
2
3
4
5
CREATE VIEW v_appart_avec_nature
SELECT a.-- les colonnes souhaitées dela table appartements_LR
	n.nature
FROM appartements_LR a
INNER JOIN nature_mutation n ON n.nat_muta = a.nat_mut
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 14h51   #3
 
Inscription : février 2012
Messages : 2
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 2
Points : -1
Points : -1
Cinephil,

Merci de ton aide. Je viens de trouver une autre solution qui semble fonctionner :

Code :
1
2
UPDATE appartements_LR
SET appartements_LR.nat_mut=(SELECT nature_mutation.nature FROM nature_mutation WHERE nature_mutation.nat_muta=appartements_LR.nat_mut);
Pour ce qui est de la vue si j'ai bien compris il s'agit d'une jointure temporaire? Je m'en vais de ce pas essayer ta proposition mais j'ai bien peur qu'elle ne corresponde pas à mes besoins.

Pour être plus clair la mise à jour de cette table est injecté directement dans un SIG. Pour les utilisateurs c'est plus clair quand ils ouvrent le fiche info d'avoir la signification de cette abréviation. Or avec cette vue j'ai bien peur de ne rien avoir.
Lancelot du Lac35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/02/2012, 17h18   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 030
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 030
Points : 18 334
Points : 18 334
Envoyer un message via MSN à CinePhil
Tu n'as pas dû aller lire les liens de mon message !

Une vue est une requête enregistrée qui s'interroge ensuite comme une table.

Au lieu d'interroger une table contenant des données redondantes qui risquent d'être écrites de façons différentes d'une ligne à l'autre, fait la requête SELECT qui te permet d'afficher la liste aux utilisateurs sur la vue.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h33.


 
 
 
 
Partenaires

Hébergement Web