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

SQL Procédural MySQL Discussion :

Jointure ne retourne rien et pourtant elle devrait la bougre


Sujet :

SQL Procédural MySQL

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Par défaut Jointure ne retourne rien et pourtant elle devrait la bougre
    Bonjour tout le monde,

    Contexte de la bizarie :

    2 tables sous MySql :
    -cmd_contenu et MagParAffilie
    1 champs servant de jointure présent dans les 2 tables :
    -idMag (varchar(9) dans les 2 tables PRIMARY KEY)

    ma requete :
    SELECT * FROM MagParAffilie M, cmd_contenu C WHERE M.idMag = C.idMag
    => no data retourned

    Là déjà très bizare je trouve étant donné qu'il y'a au moins 200 idMag pareils dans les 2 tables.

    Ensuite, si je vais dans phpmyadmin, je clic pour modifier une occurence de ma table MagParAffilie (par exemple l'occurence dont l'idMag est '36273') je la modifie même pas, juste sur "valider", et bein si je refais la requête plus haut il me sort la ligne dont l'idMag est '36273'...

    Paranormal ?



    Merci à ceux qui m'ont lu et un ENORME merci à ceux qui pourront m'aider

    En tout cas, très bon week end !!

  2. #2
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Tente de faire une réparation de tes tables, je vois que ça.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Par défaut
    Salut Xunil et merci bien pour la réponse !

    Comment on fait ce genre d'opération ? j'en ai jamais entendu parler pour tout te dire...

    Merci.

  4. #4
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Une simple requête :

    http://dev.mysql.com/doc/refman/5.0/...air-table.html

    phpMyAdmin fournit cette option.

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Par défaut
    Voilà, je viens de réparer mes tables mais ma jointure ne fonctionne toujours pas...
    Avez-vous d'autres idées, car je ne sais plus vers quel saint me vouer...

    Merci et bonne semaine !

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 054
    Par défaut
    Question toute bête : les 2 colonnes de la jointure ont bien le même type (une explication serait qu'une chaîne de caractères a des espaces à la fin et l'autre pas, par exemple) ?
    Autre piste : écrire la jointure dans sa version standard SQL-99, avec un INNER JOIN.
    Quelle est la version de MySQL ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Par défaut
    Oui, elles sont du même type, (varchar 11 toutes les deux), j'ai testé avec l'agrégat INNER JOIN mais idem...

    J'ai vérifié également s'il y avait un espace en trop dans l'un des deux champs mais non !!

    C'est fou ça quand même !!

    Pour info, la version de MySql est 5.0.18

  8. #8
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 054
    Par défaut
    Et les deux tables sont encodées dans les mêmes jeux de caractères ?
    Si les codes sont numériques, il faudrait essayer en convertissant les champs des deux tables en entiers, pour voir ce que ça donne.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  9. #9
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Par défaut
    Les 2 tables sont bien encodés de la même manière, j'ai mis les deux champs idMag en int(8) et ça marche...

    Mais le souci est que je ne pas garder ce type de format car certains de mes idMag sont : '05363' par exemple, le '0' ne passe donc pas...

  10. #10
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 054
    Par défaut
    Ca confirme quand même qu'il y a un problème au niveau d'un des deux champs en chaîne de caractères...
    On progresse .
    Essaie maintenant en mettant UPPER(M.idMag) = UPPER(C.idMag), pour voir...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  11. #11
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Par défaut
    Non... toujours pareil

    En faite la table qui pose problème est MagParAffilie car si j'edit l'une des lignes de cette table, celle-ci apparait alors dans ma jointure (alors que je n'ai rien modifié)

    Cette table est rempli à l'aide de la fonction LOAD DATA... qui permet de remplire une table avec un fichier texte.

  12. #12
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Il n'y aurait pas par hasard des espaces dans tes champs ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM MagParAffilie M 
    JOIN cmd_contenu C
    ON TRIM(M.idMag) = TRIM(C.idMag);

  13. #13
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Par défaut
    Bien vu, mais hélas ça ne marche toujours pas, par contre quand je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from MagParAffilie where idMag = '38273'
    ça ne retourne rien et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from MagParAffilie where idMag = 38273
    fonctionne !! Voilà pourquoi mon test d'égalité ne fonctionne pas car il compare un entier avec une chaine de caractère.

    Mon champ est pourtant bien en varchar... comme je le disais plus haut, il est alimenté à l'aide de la fonction LOAD DATA LOCAL INFILE :

    Code en PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $req = "LOAD DATA LOCAL INFILE '/home/srv/www/MaJBdD/MaJ-MagParAffilie1-.txt' REPLACE INTO TABLE MagParAffilie
    LINES TERMINATED BY '\\r' ";
     
    $resu = mysql_query($req);
    Structure du fichier importé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "38273","Damier","Lille"...

  14. #14
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 054
    Par défaut
    Alors ta colonne n'est pas en varchar ?
    Pour résoudre le problème, il faut caster en entier...
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  15. #15
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Par défaut
    Si justement.... ma colonne est bien en varchar(9)... Mais les données sont vus comme des entiers (au vu de la requête évoquée dans mon précédent post).

    Comment on "caste en entier" ?

    Merci pour votre implication en tout cas !!

  16. #16
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 054
    Par défaut
    Citation Envoyé par soad029
    Comment on "caste en entier" ?
    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where cast(idMag as int) = ...
    Tu peux aussi caster en chaîne de caractères (tu as le choix).

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  17. #17
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Par défaut
    Ho lala... Dans la logique des choses je me suis dis que ça allait marcher, mais non !

    Déjà un exemple tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from MagParAffilie where idMag = cast('93101' as int)
    Erreur de syntaxe... (meme avec int(9))...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from cmd_contenu where idMag = cast(93101 as char)
    Fonctionne !! Donc je me suis dit que j'allais ma jointure dans ce sens, à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from cmd_contenu C, MagParAffilie M where cast(M.idMag as char) = C.idMag
    No data returned, pourtant j'ai bien un idMag de 93101 dans les deux tables...

  18. #18
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 054
    Par défaut
    Essaie en castant des deux côtés de la jointure, et en précisant une longueur de char (char(5) si tous les id font 5 en longueur).

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  19. #19
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Par défaut
    Toujours pareil en faite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from cmd_contenu C, MagParAffilie M where cast(M.idMag as char(5)) = cast(C.idMag as char(5))
    => No data retourned

  20. #20
    Membre émérite Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Par défaut
    Je prend la discussion en cours juste pour verifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select cast('93101' AS int);
    chez moi rien que ça ça ne marche pas
    ça marche chez vous ?

    moi je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select cast('93101' AS SIGNED);
    peut etre ça aidera

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Jointure externe, qui ne retourne rien.
    Par guitou0 dans le forum SQL
    Réponses: 11
    Dernier message: 30/04/2008, 13h35
  2. [Java][debutant]select count(*) ne retourne rien !!
    Par Invité dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/01/2007, 11h39
  3. Erreur query ne retourne rien
    Par TeddyBEER dans le forum Outils
    Réponses: 3
    Dernier message: 28/04/2006, 15h09
  4. Si mysql ne retourne rien que faire ?
    Par pierrera dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/02/2006, 11h12
  5. SELECT qui ne retourne rien à cause d'anti-slash
    Par mikyfpc dans le forum Outils
    Réponses: 8
    Dernier message: 07/08/2005, 23h04

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