Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes 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 05/08/2011, 12h13   #1
Invité de passage
 
Homme Frédéric
Inscription : août 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 10
Points : 2
Points : 2
Par défaut La constitution d'une requête

Bonjour,
Voici la première étape de la requête que je n'arrive pas à finaliser.

Pour tous les enregs d’une table principale ‘Selection’ dans laquelle j’ai un code client, et un code correspondant. Je dois récupérer dans la table client le code postal, puis à partir du code correspondant et des 2 premiers caractères du code postal je dois rapatrier la valeur d’un champ (le nom contact) de la table Correspondant en fonction de code correspondant et du département.
J'ai fait la 1° étape de la requête avec des constantes. La recherche des infos pour une ligne de la table Selection (valeurs code selection.code_corresp= ‘002309’ et selection.code_client=’001715’) est :

Code :
1
2
3
4
5
6
7
8
9
SELECT nom_contact  
FROM corresp 
WHERE 
Code_corresp = '002309' 
AND Dep_corresp LIKE(concat('%',LEFT((
    SELECT client.Dep_client 
    FROM client 
    WHERE client.Code_client = '001715'
),2),'%'))
Quelle serait la syntaxe pour appliquer cette requête à toutes les lignes de la table Selection ?

L'objectif final est de mettre à jour un champ de la table principale 'Selection' avec le nom du contact.

Merci pour votre aide
fredsql est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 13h32   #2
Membre confirmé
 
Avatar de GyZmoO
 
Homme Mickaël
Ingénieur développement logiciels
Inscription : février 2006
Messages : 402
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : février 2006
Messages : 402
Points : 238
Points : 238
Envoyer un message via MSN à GyZmoO
Salut.

Si on pouvait voir la définition des tables ça serait bien !
(J'ai un peu de mal à saisir où sont les infos avec toutes ces histoires de code etc...)
__________________
define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.
GyZmoO est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 16h58   #3
Invité de passage
 
Homme Frédéric
Inscription : août 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 10
Points : 2
Points : 2
En clair ...
L'objectif est de rapatrier dans la table 'Selection' le nom d'un contact qui dépend d'un code correspondant et de son département.

La mécanique est :
Table 'Selection' :
- Code Client
- Code Correspondant
- Nom du contact (Zone à renseigner par le process que je cherche à faire)

Le département est dans la table Client :
Table 'Client'
- Code Client
- Code Postal (5 caractères, le département correspond aux 2 premiers.)

Table Correspondant :
- Code correspondant
- Departements (Zone ayant tous les départements associés au contact. Exemple : 71,69,38,26)
- Nom du Contact

L'accès à cette table correspondant se fait donc par le code correspondant + l'existence du département de la table client dans le champ départements.

J'espère avoir été plus clair !

Merci
fredsql est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/08/2011, 19h16   #4
Membre habitué
 
Inscription : septembre 2002
Messages : 140
Détails du profil
Informations forums :
Inscription : septembre 2002
Messages : 140
Points : 118
Points : 118
Bonjour,

Vérifie le SELECT ci-dessous :
Code :
1
2
3
4
 
SELECT t1.`Code client`, t2.`Code correspondant`, t2.`Nom du contact` 
FROM Client AS t1
LEFT JOIN Correspondant AS t2 ON t2.Departements = LEFT(t1.`Code postal`, 2)
Et si ça marche :
Code :
1
2
3
4
INSERT INTO `Selection` (`Code client`, `Code correspondant`, `Nom du contact`)
SELECT t1.`Code client`, t2.`Code correspondant`, t2.`Nom du contact` 
FROM Client AS t1
LEFT JOIN Correspondant AS t2 ON t2.Departements = LEFT(t1.`Code postal`, 2)
C'est ça ?
papa6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 21h48   #5
Membre confirmé
 
Avatar de GyZmoO
 
Homme Mickaël
Ingénieur développement logiciels
Inscription : février 2006
Messages : 402
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : février 2006
Messages : 402
Points : 238
Points : 238
Envoyer un message via MSN à GyZmoO
Salut !

Hmmm.

Donc, si je comprends bien, dans la table Correspondant, la colonne 'départements' peut représenter plusieurs départements (sous forme de chaine de caractères je suppose). Me trompe-je ?

Si c'est le cas, je te conseille, (si possible) de revoir ton modèle de données.

En effet tu ne respectes pas la 1ère forme normale.
Tu peux regarder ici si jamais :

http://fsmrel.developpez.com/basesre...normalisation/

@+
__________________
define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.
GyZmoO est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/08/2011, 09h03   #6
Invité de passage
 
Homme Frédéric
Inscription : août 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 10
Points : 2
Points : 2
En effet GyZmoO, la vraie vie est parfois différente des belles théories, il faut s'adapter aux situations que l'on rencontre et vivre avec l'historique !

Je teste la proposition de Papa6 et je vous tiens informé

Merci
fredsql est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 09h17   #7
Invité de passage
 
Homme Frédéric
Inscription : août 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 10
Points : 2
Points : 2
Papa6 il manque une étape dans la requête, en fait la table 'Selection' est le point de départ car cette table comporte déjà des enregistrements avec le code client et le code correspondant, il faut que je mette à jour le champ 'Nom du contact" à partir des ces 2 codes (client et correspondant) accès à la table client pour récup du code postal (avec le code client), ensuite accès à la table correspondant pour récup du 'Nom du contact' en fonction du code correspondant et des 2 premiers car. du code postal

OK ?
fredsql est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 13h15   #8
Membre habitué
 
Inscription : septembre 2002
Messages : 140
Détails du profil
Informations forums :
Inscription : septembre 2002
Messages : 140
Points : 118
Points : 118
ok :
Code :
1
2
3
4
5
UPDATE `Selection` AS t1
LEFT JOIN Client AS t2 ON t1.`Code client` = t2.`Code client`
LEFT JOIN Correspondant AS t3 ON t1.`Code correspondant` = t3.`Code correspondant`
SET t1.`Nom du contact` = t3.`Nom du contact` 
WHERE t3.Departements = LEFT(t2.`Code postal`, 2)
(je l'ai corrigée rapidement, vérifie-la avant)
bye
papa6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 14h02   #9
Invité de passage
 
Homme Frédéric
Inscription : août 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 10
Points : 2
Points : 2
Désolé Papa6, j'essaie de faire le Select équivalent pour vérifier, mais je n'y arrive pas...
Je ne suis pas encore à l'aise avec SQL ...

Merci pour ton aide
fredsql est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 15h06   #10
Membre habitué
 
Inscription : septembre 2002
Messages : 140
Détails du profil
Informations forums :
Inscription : septembre 2002
Messages : 140
Points : 118
Points : 118
Ne t'inquiète pas
Code :
1
2
3
4
5
SELECT  t1.`Code client`, t1.`Code correspondant`, t3.`Nom du contact` 
FROM `Selection` AS t1
LEFT JOIN Client AS t2 ON t1.`Code client` = t2.`Code client`
LEFT JOIN Correspondant AS t3 ON t1.`Code correspondant` = t3.`Code correspondant`
WHERE t3.Departements = LEFT(t2.`Code postal`, 2)
Il s'agit de la requête pour les mises à jour, c'est-à-dire celles qui comptent déjà un enregistrement.
Tu peux vérifier le nombre de lignes retournées.

Tu peux aussi tester cette requête pour voir s'il y a des erreurs (normalement tu ne devrais pas obtenir de retour):
Code :
1
2
3
4
5
SELECT  t1.`Code client`, t1.`Code correspondant`, t3.`Nom du contact` 
FROM `Selection` AS t1
LEFT JOIN Client AS t2 ON t1.`Code client` = t2.`Code client`
LEFT JOIN Correspondant AS t3 ON t1.`Code correspondant` = t3.`Code correspondant`
WHERE t2.`Code client` IS NOT NULL AND t3.`Code correspondant` IS NOT NULL  AND t3.Departements <> LEFT(t2.`Code postal`, 2)
Le cas échéant, tu peux faire des corrections manuelles au cas par cas
papa6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 17h22   #11
Invité de passage
 
Homme Frédéric
Inscription : août 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 10
Points : 2
Points : 2
Super............C'est tout bon !!!!...

Merci Papa6 pour ton aide et ta rapidité !
fredsql 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 12h35.


 
 
 
 
Partenaires

Hébergement Web