Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Outils
Outils Forum d'entraide sur les outils pour MySQL. Avant de poster -> Outils MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/01/2007, 10h30   #1
Nouveau Membre du Club
 
Inscription : juin 2004
Messages : 111
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 111
Points : 26
Points : 26
Envoyer un message via MSN à Joeleclems
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 :
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 :
1
2
 
SELECT * FROM compte NATURAL JOIN forfait WHERE compte.id_compte=1;
Voici les scripts de création de mes tables :
Code :
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 :
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?
Joeleclems est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 12h46   #2
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
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.
__________________
Pensez au tag
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 14h37   #3
Nouveau Membre du Club
 
Inscription : juin 2004
Messages : 111
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 111
Points : 26
Points : 26
Envoyer un message via MSN à Joeleclems

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
Joeleclems est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 16h00   #4
Membre Expert
 
Avatar de Sivrît
 
Inscription : février 2006
Messages : 953
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 953
Points : 1 189
Points : 1 189
Citation:
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.
Sivrît est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 16h18   #5
Nouveau Membre du Club
 
Inscription : juin 2004
Messages : 111
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 111
Points : 26
Points : 26
Envoyer un message via MSN à Joeleclems
Effectivement... j'avais deux colonnes qui portait le même nom, dans les deux tables. En modifiant ça, le natural join fonctionne .
Merci beaucoup
Joeleclems est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h27.


 
 
 
 
Partenaires

Hébergement Web