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 :

Résultat étrange sur une requête


Sujet :

MySQL

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Comptable
    Inscrit en
    Janvier 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2014
    Messages : 29
    Points : 25
    Points
    25
    Par défaut Résultat étrange sur une requête
    Bonjour à tous

    Grace à vous j'ai beaucoup avancé et je suis en train de tester la base que j'ai crééer et donc là corriger.

    J'ai voulu essayer une requette pour voir quels résultat je pourrais avoir et j'ai un resultat qui n'est pas celui que j'attends. Je suis certaine que j'ai fais une boulette quelque part et j'ai tenté de corriger deux trois trucs mais ça n'avance pas.

    J'ai deux tables:



    == Structure de la table pays

    |------
    |Colonne|Type|Null|Défaut
    |------
    |//**id**//|int(11)|Non|
    |nom|varchar(100)|Oui|NULL
    |langue|varchar(100)|Oui|NULL
    |nationalite|varchar(100)|Oui|NULL
    |drapeau|varchar(255)|Oui|NULL
    |planete_id|int(11)|Oui|NULL
    == Contenu de la table pays

    |1|France|français|française|NULL|NULL
    |2|Angleterre|anglais|anglaise|NULL|NULL
    |3|USA|anglais|américaine|NULL|NULL
    |4|Allemagne|allemand|allemande|NULL|NULL
    |5|Australie|anglais|australienne|NULL|NULL
    |6|Espagne|éspagnol|espagnole|NULL|NULL
    |9|Japon|japonnais|japonaise|NULL|NULL
    |10|Italie|italien|italienne|NULL|NULL
    |11|Russie|russe|russe|NULL|NULL




    == Structure de la table personnalite

    |------
    |Colonne|Type|Null|Défaut
    |------
    |//**id**//|int(11)|Non|
    |nom|varchar(100)|Oui|NULL
    |prenom|varchar(100)|Oui|NULL
    |prenom2|varchar(100)|Oui|NULL
    |surnom|varchar(100)|Oui|NULL
    |naissance|date|Oui|NULL
    |mort|date|Oui|NULL
    |lien|int(255)|Oui|NULL
    |photo|varchar(100)|Oui|NULL
    |sexe_id|int(11)|Oui|NULL
    |ville_id|int(11)|Oui|NULL
    |pays_id|int(11)|Oui|NULL
    == Contenu de la table personnalite

    |1|Padalecki|Jared|NULL|NULL|1982-07-19|NULL|NULL| |1|0|3
    |2|Ackles|Jensen|NULL|NULL|1978-03-01|NULL|NULL| |1|0|3
    |3|Collins|Misha|NULL|NULL|1974-08-20|NULL|NULL| |1|0|3
    |4|Sheppard|Mark|Andreas|NULL|1964-05-30|NULL|NULL| |1|0|2
    |5|Day|Felicia|NULL|NULL|1979-06-28|NULL|NULL| |2|0|3






    Et voila ma requête:
    SELECT `personnalite`.`nom`, `personnalite`.`prenom`
    FROM pays, personnalite
    WHERE (`pays`.`nom` ='USA')
    ORDER BY `pays`.`nom` ASC


    Normalement le résultat devrait être 4 personnes et il me renvoi 5 personnes c'est à dire tous mes enregistrements.

    J'ai quelques soupçons concernant mes liaisons. Je crains qu'elle ne soient pas bonnes. On retrouve dans la table personnalité la clé primaire de la table pays, qui sers de clé étrangère et si mes souvenirs sont bons c'est suffisant pour faire l'appel du nom du pays.
    A moins qu'il failles ajouter quelque chose en plus dans la table personnalité.

    Encore une fois je suis perdue.

    Je vous remercie d'avance pour avoir lu ma question.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Votre modèle de données n'est pas bon. En effet
    1) il existe de nombreux pays ou il y a plusieurs langues parlées. par exemple en Europe l’Espagne (catalan et castillan) ou en suisse (français, allemand, italiens).
    2) pourquoi 2 prénoms, alors que certains en ont 3, 4 ou 5 ?
    3) pourquoi une date de mort dans la table personnalite qui va être NULL dans la plupart des cas ?

    Ensuite dans votre requête vous n'avez pas de jointure.
    Pour rappel une jointure se fait avec l'opérateur JOIN !

    Commencez par apprendre le langage SQL. Mon site web, comme mon bouquin peuvent vous y aider !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Comptable
    Inscrit en
    Janvier 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2014
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Bonjour SQLpro,

    En effet il y a des erreurs que je corrige au fure et à mesure que je les remarques.

    J'ai voulu être précise sans forcément l'être trop. Mais rien ne m’empêche de développer plus tard.

    Concernant les dates de décès j'ai préféré les mettre là car je ne m’intéresse pas qu'au personnalités qui ont des activités en ce moment donc il y aura beaucoup de personnes qui nous ont quittées.

    Merci pour l'info sur le JOIN c'était le truc qui me manquais. J'ai quelques souvenirs de SQL qui date du BTS donc plus de 10 ans. Ton site m'interesse ton lien est sur ton profile? Car ce n'est pas vraiment apprendre mais remémorer qu'il me faut.

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Comptable
    Inscrit en
    Janvier 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2014
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    J'ai trouvé mon problème.

    Voila la solution pour ceux qui en auraient besoin.

    SELECT personnalite.nom, personnalite.prenom, pays.nom
    FROM personnalite
    INNER JOIN pays ON personnalite.pays_id = pays.id
    WHERE pays.nom = 'USA'

    Explication:

    SELECT : pas la peine d'expliquer, c'est le nom des colonnes des tables dont on veut voir apparaître le résultat.

    FROM : mettre le nom de la table principale, celle qui contient les clés étrangères.

    INNER JOIN : nom de la table qui est liée à la table principale en clé étrangère

    ON: nom de la table principale + nom de la colonne où on trouve la clé étrangère

    = : nom de la table "clé étrangère" + nom de la colonne "id" qui est contient les mêmes informations que la références précédent.

    WHERE : condition de la recherche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucler un résultat pour l'envoyer sur une requête
    Par MaitrePylos dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 23/08/2013, 15h32
  2. Résultat étrange sur une recherchev
    Par ANOVA dans le forum Excel
    Réponses: 3
    Dernier message: 29/04/2011, 08h53
  3. [UNION] - Perte de résultat sur une requête avec UNION
    Par lecail65 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/09/2009, 14h30
  4. Réponses: 2
    Dernier message: 11/04/2008, 23h23
  5. retourner zero sur une requète sans résultat
    Par kelek33 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/10/2007, 16h27

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