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

 MySQL Discussion :

Tutorial sur jointures


Sujet :

MySQL

  1. #1
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut Tutorial sur jointures
    Bonjour,

    Je suis actuellement sur le tutorial des jointures.
    J'ai récupéré les fichiers de création de la base de donnée et des données elles-mêmes.
    Je travaille sous Ubuntu 8.10 et mySql Ver 14.12 Distrib 5.0.67, for debian-linux-gnu (x86_64) using readline 5.2

    A la création des tables, j'ai une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ERROR 7 (HY000): Error on rename of './MCD_HOTEL/T_CHAMBRE.MYI' to './MCD_HOTEL/#sql2-149d-309.MYI' (Errcode: 26)
    qui provient du fait que les index sont créés APRÈS la création de la table, et ceci pour tous les index...
    Bon, tant pis pour les index dans un premier temps.
    Ensuite je source le fichier des données. Il y a des erreurs qui défilent mais je n'arrive pas à voir ce que c'est puis ensuite la création des données semble fonctionner. Je ne sais pas d'où viennent ces erreurs et mon ascenseur de fenêtre n'est pas assez grand pour remonter les voir !
    Bon à priori, il y a tout de même des données dans la base...
    Je teste la requête de l'exemple 13 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT CLI_NOM, TEL_NUMERO
    FROM   T_CLIENT C 
           LEFT OUTER JOIN T_TELEPHONE T
                ON C.CLI_ID = T.CLI_ID
    WHERE  TYP_CODE = 'FAX' OR TYP_CODE IS NULL
    Notamment, le user BOUVIER devrait sortir car son TYP_CODE est NULL.
    Mais je n'obtiens pas la même sortie écran ! En effet, BOUVIER ne sort pas et lorsque je regarde le fichier de données, il y a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into T_CLIENT (CLI_ID, TIT_CODE, CLI_NOM, CLI_PRENOM) values ( 3,  'M.',  'BOUVIER',  'Alain');
    Le user BOUVIER à un id=3 et pour cet id, la table T_TELEPHONE est remplie de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    insert into T_TELEPHONE (TEL_ID, CLI_ID, TYP_CODE, TEL_NUMERO, TEL_LOCALISATION) values (  4,   3,  'GSM',  '06-11-86-78-89',  '');
    insert into T_TELEPHONE (TEL_ID, CLI_ID, TYP_CODE, TEL_NUMERO, TEL_LOCALISATION) values ( 17,   3,  'TEL',  '04-94-41-17-27',  '');
    Donc je ne comprends pas comment avec la requête 13 on puisse avoir ce résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CLI_NOM   TEL_NUMERO
    -------   --------------
    DUPONT    01-44-28-52-50
    DUPONT    05-59-45-72-42
    MARTIN    01-47-66-29-55
    BOUVIER   NULL 
    DUBOIS    04-66-62-95-64
    DREYFUS   04-92-19-18-58
    FAURE     NULL
    LACOMBE   NULL 
    DUHAMEL   01-54-11-43-89
    DUHAMEL   01-55-60-93-81
    ...
    Il y a un souci ou j'ai oublié quelque chose ?

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Ajoute CLI_ID dans le SELECT de la requête pour vérifier que les valeurs crées sont bien celles attendues

    il ne t'a pas échappé que tous ces exemples ne reposent pas sur du MySQL, mais du SQL Standard

  3. #3
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    Les ID clients sont cohérents avec les entrées insérées.
    La requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT C.CLI_ID , CLI_NOM, TEL_NUMERO FROM   T_CLIENT C         
    LEFT OUTER JOIN T_TELEPHONE T             
    ON C.CLI_ID = T.CLI_ID WHERE  TYP_CODE = 'FAX' OR TYP_CODE IS NULL;
    Le résultat :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    +--------+-------------+----------------+
    | CLI_ID | CLI_NOM     | TEL_NUMERO     |
    +--------+-------------+----------------+
    |      1 | DUPONT      | 01-44-28-52-50 | 
    |      1 | DUPONT      | 05-59-45-72-42 | 
    |      2 | MARTIN      | 01-47-66-29-55 | 
    |      4 | DUBOIS      | 04-66-62-95-64 | 
    |      5 | DREYFUS     | 04-92-19-18-58 | 
    |      8 | DUHAMEL     | 01-54-11-43-89 | 
    |      8 | DUHAMEL     | 01-55-60-93-81 | 
    |     10 | MARTIN      | 01-44-22-56-21 | 
    |     13 | PHILIPPE    | 01-48-44-86-19 | 
    |     15 | DAUMIER     | 01-48-28-17-95 | 
    |     16 | CHABAUD     | 01-46-57-74-74 | 
    |     20 | FRANQUINET  | 01-64-54-96-11 | 
    |     24 | CHTCHEPINE  | 04-66-67-28-23 | 
    |     25 | LE GUILLARD | 01-42-77-35-92 | 
    |     26 | GARREAU     | 01-34-66-60-41 | 
    |     31 | BOUCHET     | 01-69-21-36-70 | 
    |     32 | LEBAILLIF   | 01-69-21-36-70 | 
    |     39 | HESS        | 03-21-81-47-80 | 
    |     40 | CHATON      | 05-49-41-35-37 | 
    |     48 | TARSAC      | 04-67-58-28-13 | 
    |     49 | COULOMB     | 01-47-04-24-79 | 
    |     56 | MOURGUES    | 01-48-78-30-69 | 
    |     56 | MOURGUES    | 04-66-22-37-66 | 
    |     57 | PIERROT     | 04-66-22-37-66 | 
    |     64 | VILLE       | 04-91-88-10-57 | 
    |     68 | DE CONINCK  | 05-61-27-71-21 | 
    |     70 | MICHEL      | 04-67-49-37-91 | 
    |     79 | LEPERCQ     | 04-94-49-17-45 | 
    |     84 | BAVEREL     | 01-53-27-30-01 | 
    |     88 | BACQUE      | 04-68-04-33-05 | 
    |     89 | COUASSE     | 05-57-77-12-23 | 
    |     92 | PARIS       | 04-92-72-07-96 | 
    |     96 | GAL         | 04-90-71-91-14 | 
    |     97 | CHAMBON     | 05-59-03-38-88 | 
    |     98 | DUQUESNAY   | 01-42-65-07-61 | 
    +--------+-------------+----------------+
    Quelqu'un a essayé de construire la base, insérer les données avec les fichiers et testé la requête ?

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Et si tu fais juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CLI_ID , CLI_NOM
    FROM   T_CLIENT 
    WHERE CLI_NOM IN('BOUVIER','FAURE','LACOMBE')

  5. #5
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    mysql> SELECT CLI_ID , CLI_NOM
        -> FROM   T_CLIENT 
        -> WHERE CLI_NOM IN('BOUVIER','FAURE','LACOMBE') ;
    +--------+---------+
    | CLI_ID | CLI_NOM |
    +--------+---------+
    |      3 | BOUVIER | 
    |      6 | FAURE   | 
    |      7 | LACOMBE | 
    +--------+---------+
    3 rows in set (0.00 sec)

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Si c'est trois là n'apparaissent pas c'est qu'il n'ont pas de fax.
    Si tu migres la condition TYP_CODE = 'FAX' dans la clause ON et que tu laisses WHERE TYP_CODE IS NULL, ils devraient apparaître.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT C.CLI_ID , CLI_NOM, TEL_NUMERO FROM   T_CLIENT C         
    LEFT OUTER JOIN T_TELEPHONE T             
    ON C.CLI_ID = T.CLI_ID  AND TYP_CODE = 'FAX'
    WHERE TYP_CODE IS NULL;

  7. #7
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    Citation Envoyé par Maljuna Kris Voir le message
    Si c'est trois là n'apparaissent pas c'est qu'il n'ont pas de fax.
    Si tu migres la condition TYP_CODE = 'FAX' dans la clause ON et que tu laisses WHERE TYP_CODE IS NULL, ils devraient apparaître.
    Je ne sais pas, ce que je voulais savoir c'est si c'est normal ou pas d'avoir un résultat différent en utilisant la MÊME requête que celle présentée dans le tutorial.
    Je me doute qu'un modifiant la requête à loisir, on finira par obtenir le résultat voulu.
    Ce que je me demande c'est dois-je suivre ce tutorial car il est juste ou bien y a-t-il des erreurs dans la retranscription des requêtes ?
    Et comme déjà que j'ai du mal à comprendre, si je ne suis pas certain de ce que je lis, cela ne va pas m'aider.
    Merci de ton aide en tout cas.

  8. #8
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par fabrice91 Voir le message
    Ce que je me demande c'est dois-je suivre ce tutorial car il est juste ou bien y a-t-il des erreurs dans la retranscription des requêtes ?
    Il y a apparemment eu des erreurs lors de la création et de l'INSERT dans les tables.
    Si cela a joué sur les PK ou les FK, les résultats peuvent être complètement différents.
    Par contre le tuto est tout à fait fiable.

Discussions similaires

  1. [WIFI]Tutorial sur installation et pb wifi ?
    Par elitost dans le forum Hardware
    Réponses: 3
    Dernier message: 21/02/2006, 14h43
  2. Tutorial sur HTMLEditorKit
    Par sniperseb dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 18/01/2006, 19h23
  3. [MYSQL] Question sur jointure
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/10/2005, 11h46
  4. Un tutorial sur les font ?
    Par Clad3 dans le forum OpenGL
    Réponses: 2
    Dernier message: 16/03/2005, 10h44
  5. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54

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