IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Probleme de jointure urgent


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 31
    Points
    31
    Par défaut Probleme de jointure urgent
    Bonjour,

    Un autre problème en ce jour sur lequel je me casse la tête depuis ce matin.

    J'ai une table avec un codepostal et une autre un code commune, dans la première je souhaiterais remplacer le codepostal par le code commune correspondant.
    Mon problème est qu'il ne veux pas me faire ça, il m'associe une foule de code commune pour un codepostal, ce qui devrait être l'inverse normalement !

    Voici mes différentes requêtes et extrait de table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE SRC9 AS (SELECT DISTINCT SNP AS SNAP, APET700 AS NAF, SIRET,NOMEN AS NOM,CODPOS,LIBCOM AS COMMUNE, SIEGE,IF(TEFET<32,E.VALUE,EFETCENT) AS EFFECTIF
    FROM SIRENE S
    INNER JOIN EFFECTIF E ON S.TEFET=E.TRANCHE
    INNER JOIN `NAF-SNAP` N ON S.APET700 = N.NAF);
    Cela permet de créer une table contenant un codepostal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE SRC6 AS (SELECT SNAP,NAF,SIRET,NOM,CCM,COMMUNE,SIEGE,EFFECTIF FROM SRC9 S,CCT_CCM C WHERE C.CDP=S.CODPOS);
    Celle-ci permet de transformer le code postal en code commune. C'est la que ça coince.

    Voilà ce qu'il me sort :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    +----------+------+----------------+--------------------------------+--------+-------+----------------------+-------+----------+
    | SNAP     | NAF  | SIRET          | NOM                            | CODPOS | CCM   | COMMUNE              | SIEGE | EFFECTIF |
    +----------+------+----------------+--------------------------------+--------+-------+----------------------+-------+----------+
    | 02 01 10 | 631E | 00602001000051 | ETABLISSEMENTS FROMENTIN       | 62140  | 62046 | AUBIN SAINT VAAST    | 0     | 35       |
    | 02 01 10 | 631E | 00602001000051 | ETABLISSEMENTS FROMENTIN       | 62140  | 62175 | AUBIN SAINT VAAST    | 0     | 35       |
    | 02 01 10 | 631E | 00602001000051 | ETABLISSEMENTS FROMENTIN       | 62140  | 62212 | AUBIN SAINT VAAST    | 0     | 35       |
    | 02 01 10 | 631E | 00602001000051 | ETABLISSEMENTS FROMENTIN       | 62140  | 62219 | AUBIN SAINT VAAST    | 0     | 35       |
    | 02 01 10 | 631E | 00602001000051 | ETABLISSEMENTS FROMENTIN       | 62140  | 62220 | AUBIN SAINT VAAST    | 0     | 35       |
    | 02 01 10 | 631E | 00602001000051 | ETABLISSEMENTS FROMENTIN       | 62140  | 62222 | AUBIN SAINT VAAST    | 0     | 35       |
    | 02 01 10 | 631E | 00602001000051 | ETABLISSEMENTS FROMENTIN       | 62140  | 62359 | AUBIN SAINT VAAST    | 0     | 35       |
    | 02 01 10 | 631E | 00602001000051 | ETABLISSEMENTS FROMENTIN       | 62140  | 62388 | AUBIN SAINT VAAST    | 0     | 35       |
    | 02 01 10 | 631E | 00602001000051 | ETABLISSEMENTS FROMENTIN       | 62140  | 62395 | AUBIN SAINT VAAST    | 0     | 35       |
    Normalement, cet enregistrement ne devrait apparaître qu'une seule fois.

    Le fait d'utiliser un DISTINCT dans la seconde requête me fait perdre des données pour je ne sais quelle raison.

    Voici un extrait des tables que j'utilise :

    Table CCT_CCM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    +--------+--------------+--------------------+-------------------+-----------------+----------------------+------+---------------+---------+-------+-------+-----------+---------+------------+----------------+---------------+---------------+----------+
    | Numero | INSEE_REGION | NOM_REGION         | INSEE_DEPARTEMENT | NOM_DEPARTEMENT | INSEE_ARRONDISSEMENT | CCT  | CAN           | SUP_CAN | CCM   | CDP   | COM       | SUP_COM | POPULATION | NOM_ZAS        | CODE_ZAS_EURO | CODE_ZAS_PSQA | CODE_PPA |
    +--------+--------------+--------------------+-------------------+-----------------+----------------------+------+---------------+---------+-------+-------+-----------+---------+------------+----------------+---------------+---------------+----------+
    |      1 |     31.00000 | NORD-PAS-DE-CALAIS |          59.00000 | NORD            |              2.00000 | 5914 | CAMBRAI OUEST |    9018 | 59001 | 59268 | ABANCOURT |     567 |  400.00000 | TERRITOIRENPDC | FR11N00002    | PSQA08        | NULL     |
    +--------+--------------+--------------------+-------------------+-----------------+----------------------+------+---------------+---------+-------+-------+-----------+---------+------------+----------------+---------------+---------------+----------+
    Table Sirene :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    +--------+--------------+--------------------+-------------------+-----------------+----------------------+------+---------------+---------+-------+-------+-----------+---------+------------+----------------+---------------+---------------+----------+
    | Numero | INSEE_REGION | NOM_REGION         | INSEE_DEPARTEMENT | NOM_DEPARTEMENT | INSEE_ARRONDISSEMENT | CCT  | CAN           | SUP_CAN | CCM   | CDP   | COM       | SUP_COM | POPULATION | NOM_ZAS        | CODE_ZAS_EURO | CODE_ZAS_PSQA | CODE_PPA |
    +--------+--------------+--------------------+-------------------+-----------------+----------------------+------+---------------+---------+-------+-------+-----------+---------+------------+----------------+---------------+---------------+----------+
    |      1 |     31.00000 | NORD-PAS-DE-CALAIS |          59.00000 | NORD            |              2.00000 | 5914 | CAMBRAI OUEST |    9018 | 59001 | 59268 | ABANCOURT |     567 |  400.00000 | TERRITOIRENPDC | FR11N00002    | PSQA08        | NULL     |
    +--------+--------------+--------------------+-------------------+-----------------+----------------------+------+---------------+---------+-------+-------+-----------+---------+------------+----------------+---------------+---------------+----------+
    Merci

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Je n'ai pas décortiqué les requettes, mais sachant qu'il y a en France environ 6500 codes postaux pour 36500 communes, seul le code insee (ton code commune) peut retourner un enreg. unique. Le code postal 62140 de ton exemple est utilisé par 25 communes.
    Pour le reste, je n'ai pas tout compris.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Le problème c'est que ça ne devrait pas être le cas.
    Comme tu peux le voir, une même commune à plusieurs code postal, ce qui n'est pas logique et dans le cas de l'exemple que j'ai publié, il ne devrait y avoir qu'un seul enregistrement pour ce siret.

    L'erreur se produit quand je veux faire le lien entre les code postaux de mes différentes tables afin de pouvoir obtenir le code commune correspondant à la ville.

    J'ai essayé en faisant une jointure avec le nom de la commune mais je perds des enregistrements à cause des noms composés.

    Je devrais obtenir 300 000 ou 400 000 enregistrements et dans le cas de la jointure par code postal, j'en ai 1 600 000.

    Quelqu'un aurai-il une idée pour ma requête ?

    Merci

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Pour simplifier le problème. Celui se trouvant au niveau des codes voici le problème.

    Je veux obtenir ça :

    Code : 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
    +-------+------------+
    | CCM   | CODEPOSTAL |
    +-------+------------+
    | 53357 | 62170      | 
    | 59001 | 59268      | 
    | 59002 | 59215      | 
    | 59003 | 59149      | 
    | 59004 | 59310      | 
    | 59005 | 59251      | 
    | 59006 | 59144      | 
    | 59007 | 59194      | 
    | 59008 | 59580      | 
    | 59009 | 59650      | 
    | 59009 | 59493      | 
    | 59009 | 59491      | 
    | 59009 | 59580      | 
    | 59010 | 59400      | 
    | 59011 | 59112      | 
    | 59012 | 59186      | 
    | 59013 | 59152      | 
    | 59014 | 59410      | 
    | 59015 | 59151      | 
    | 59016 | 59380      | 
    +-------+------------+
    Ceci étant le contenu d'une table de correspondance CCM-CDP.

    Moi, j'exécute cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT CCM,CODPOS FROM SIRENE S,CCM_CDP C WHERE C.CODEPOSTAL=S.CODPOS;
    Logiquement je devrais obtenir exactement la même table ! étant donné que la table SIRENE posséde un champ CODPOS qui est identique au champ CODEPOSTAL de la table précédente. Au lieu de ça, j'obtiens :

    Code : 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
    25
    26
    27
    28
    29
    30
    +-------+--------+
    | CCM   | CODPOS |
    +-------+--------+
    | 62219 | 62140  | 
    | 62481 | 62140  | 
    | 62690 | 62140  | 
    | 62222 | 62140  | 
    | 62700 | 62140  | 
    | 62834 | 62140  | 
    | 62677 | 62140  | 
    | 62395 | 62140  | 
    | 62824 | 62140  | 
    | 62212 | 62140  | 
    | 62175 | 62140  | 
    | 62596 | 62140  | 
    | 62743 | 62140  | 
    | 62549 | 62140  | 
    | 62550 | 62140  | 
    | 62447 | 62140  | 
    | 62661 | 62140  | 
    | 62388 | 62140  | 
    | 62046 | 62140  | 
    | 62398 | 62140  | 
    | 62461 | 62140  | 
    | 62521 | 62140  | 
    | 62220 | 62140  | 
    | 62871 | 62140  | 
    | 62359 | 62140  | 
    | 62873 | 62770  | 
    | 62335 | 62770  |
    J'y comprends rien et le pire de tout ça est que ça marchait avant, j'ai juste ajouté des clés et index au table entre deux.

    Aidez-moi, plz !!

Discussions similaires

  1. Probleme en jointure
    Par angelayoub dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/01/2006, 15h07
  2. [MySQL] probleme de jointure entre 2 tables
    Par guy2004 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 30/10/2005, 14h11
  3. Probleme de jointure externe ...
    Par amenis dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 06/09/2005, 09h59
  4. Probleme de Jointures imbriquées dans une requête
    Par Crevin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/04/2005, 11h05
  5. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo