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

Outils MySQL Discussion :

Natural Join aucun resultat


Sujet :

Outils MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 111
    Par défaut Natural Join aucun resultat
    Versions :
    phpMyAdmin 2.5.7
    MySQL 4.0.18-nt-log sur le serveur localhost

    Bonjour,
    J'ai un souci avec l'exécution du NATURAL JOIN sur ma base mysql...
    La requête qui suit, fonctionne, et me retourne le résultat souhaité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM compte ,forfait WHERE compte.id_forfait = forfait.id_forfait AND compte.id_compte=1;
    La suivante fonctionne, mais ne retourne aucun résultat...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM compte NATURAL JOIN forfait WHERE compte.id_compte=1;
    Voici les scripts de création de mes tables :
    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
     
    CREATE TABLE forfait (
      id_forfait INTEGER(6) UNSIGNED NOT NULL AUTO_INCREMENT,
      id_appli INTEGER(6) NOT NULL,
     
    ...
     
      PRIMARY KEY(id_forfait),
      INDEX FKid_appli(id_appli),
      FOREIGN KEY(id_appli)
        REFERENCES appli(id_appli)
          ON DELETE NO ACTION
          ON UPDATE NO ACTION
    )
    TYPE=InnoDB;
     
    CREATE TABLE compte (
      id_compte INTEGER(6) UNSIGNED NOT NULL AUTO_INCREMENT,
      id_forfait INTEGER(6) UNSIGNED NOT NULL,
      intitule VARCHAR(64) NOT NULL,
     ...
      min_ecoule TINYINT(2) UNSIGNED NULL,
      PRIMARY KEY(id_compte),
      INDEX FKid_forfait(id_forfait),
      FOREIGN KEY(id_forfait)
        REFERENCES forfait(id_forfait)
          ON DELETE NO ACTION
          ON UPDATE NO ACTION
    )
    TYPE=InnoDB;
    Lorsque que j'exporte les tables, voila le script SQL que phpMyAdmin me créer : apparemment, les "FOREIGN KEY" ont disparu!

    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
     
    CREATE TABLE `compte` (
      `id_compte` int(6) unsigned NOT NULL auto_increment,
      `id_forfait` int(6) unsigned NOT NULL default '0',
      `intitule` varchar(64) NOT NULL default '',
     
      ...
     
      `min_ecoule` tinyint(2) unsigned default NULL,
      PRIMARY KEY  (`id_compte`),
      KEY `FKid_forfait` (`id_forfait`)
    ) TYPE=InnoDB AUTO_INCREMENT=2 ;
     
     
    CREATE TABLE `forfait` (
      `id_forfait` int(6) unsigned NOT NULL auto_increment,
      `id_appli` int(6) NOT NULL default '0',
      `intitule` varchar(64) NOT NULL default '',
      PRIMARY KEY  (`id_forfait`),
      KEY `FKid_appli` (`id_appli`)
    ) TYPE=InnoDB AUTO_INCREMENT=11 ;
    La je coince... vous avez une idée? comment faire pour utiliser les natural join? y a t'il une configuration particulière à mettre en place?

  2. #2
    Membre Expert
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Par défaut
    Bonjour,

    Citation Envoyé par Documentation Officielle
    The NATURAL [LEFT] JOIN of two tables is defined to be semantically equivalent to an INNER JOIN or a LEFT JOIN with a USING clause that names all columns that exist in both tables.
    Les deux requêtes ne sont donc pas équivalentes. Le NATURAL JOIN fait une jointure sur compte, forfait et intitulé alors que l'autre ne fait de joiture que sur le forfait.

    Pour ce que je comprend du problème, il faudrait mieux utiliser INNER JOIN.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 111
    Par défaut

    Faire un INNER JOIN revient au même que de faire une jointure classique avec une clause where en plus...
    A quoi sert le NATURAL JOIN dans ce cas? ne doit être pas faire le lien avec la table dont il a une clé étrangere?
    Ma table compte à une clé étrangere id_forfait, et une clé primaire id_compte. Les autres champs ne sont pas des clés.
    Ma table forfait à une clé primaire id_forfait.
    Pourquoi le natural join ne lie t'il pas ses deux tables? je ne comprends pas

  4. #4
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    The NATURAL [LEFT] JOIN of two tables is defined to be semantically equivalent to an INNER JOIN or a LEFT JOIN with a USING clause that names all columns that exist in both tables.
    La doc mysql c'est bien, lisez-en

    Avec un 'NATURAL' on lie sur toutes les colonnes identiques. Je parie que tu as des homonymes (peut-être même avec le même type) entre les deux tables.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 111
    Par défaut
    Effectivement... j'avais deux colonnes qui portait le même nom, dans les deux tables. En modifiant ça, le natural join fonctionne .
    Merci beaucoup

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/11/2006, 15h35
  2. impossibilité d'enchaîner les NATURAL JOIN
    Par ctobini dans le forum Langage SQL
    Réponses: 1
    Dernier message: 14/09/2006, 17h24
  3. INNER JOIN , NATURAL JOIN : quelle différence?
    Par cladsam dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/02/2006, 17h05
  4. NATURAL JOIN imbriqués
    Par papy_tergnier dans le forum Langage SQL
    Réponses: 6
    Dernier message: 05/01/2006, 10h37
  5. Requête avec NATURAL JOIN
    Par blids dans le forum SQL
    Réponses: 4
    Dernier message: 06/08/2004, 11h52

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