Base de Données Avec Postgresql

Résolu/Fermé
Sarvock Messages postés 20 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 3 mai 2010 - 2 mai 2009 à 02:28
estofilo Messages postés 9 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 24 mai 2009 - 23 mai 2009 à 20:21
Bonsoir,

Je veux faire une requête qui m'affiche le nombre d'heure que fait un enseignant par rapport à ma base de données,
Lorsque j'utilise cette commande :
" SELECT Sum((3/2)*Heure_Cours+1*Heure_TD+(2/3)*Heure_TP) as Heures_ETD, N_Enseignant
FROM Enseignant LEFT OUTER JOIN Correspond ON (Enseignant.N_Enseignant = Correspond.N_Enseignant)
GROUP BY N_Enseignant
ORDER BY N_Enseignant; "

Psql me répond : ERREUR: la référence à la colonne <<n_enseignant>> est ambigu

Je ne trouve pas mon erreur, et je ne comprends d'ailleurs pas, quelle est l'erreur,

Voilà les tables, si qqn peut m'aider :


CREATE TABLE Enseignant
(N_Enseignant INTEGER,
Nom_Enseignant varchar(20) CHECK (NOT NULL),
Prenom_Enseignant varchar(20),
Adresse_Enseignant varchar(50),
Telephone_Enseignant INTEGER,
Statut_Enseignant varchar(10) CHECK (Statut_Enseignant='Professeur' OR Statut_Enseignant='MaitreConf'),
Nb_Heure INTEGER CHECK (Nb_Heure='192' OR Nb_Heure='384'),
Attache_Enseignant varchar(50),
PRIMARY KEY (N_Enseignant),
FOREIGN KEY (Attache_Enseignant) REFERENCES Departement(Nom_Departement)
);


CREATE TABLE Correspond
(Heure_Cours INTEGER CHECK (NOT NULL),
Heure_TD INTEGER CHECK (NOT NULL),
Heure_TP INTEGER CHECK (NOT NULL),
N_Module INTEGER,
N_Enseignant INTEGER,
PRIMARY KEY (N_Module, N_Enseignant),
FOREIGN KEY (N_Module) REFERENCES Module(N_Module),
FOREIGN KEY (N_Enseignant) REFERENCES Enseignant(N_Enseignant)
);

Merci de bien vouloir m'aider.

2 réponses

estofilo Messages postés 9 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 24 mai 2009 8
23 mai 2009 à 20:21
En fait ce n'est pas la jointure c'est dans le SELECT que l'interpréteur SQL voit une ambiguité car on lui demande une colonne qui est dans 2 tables. Il se trouve que c'est la même valeur puisque justement il y a jointure sur cette colonne. Normalement il est possible de lever l'ambiguité en mettant au lieu de:
ON (Enseignant.N_Enseignant = Correspond.N_Enseignant)
la clause:
USING (N_Enseignant)
2
Sarvock Messages postés 20 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 3 mai 2010 11
2 mai 2009 à 15:52
Bon j'ai réglé mon problème en changeant le nom de l'attribut de la table 'Correspond' ('N_Enseignant'=>'N-Ens'), Postgresql ne doit pas apprécier de faire de LEFT OUTER JOIN sur deux tables avec le même nom d'attribut!!!
Si ça peut aider qqn...
0