[MySQL] Requête imbriquée

WRInaute discret
Bonjour à tous !

Je vous présente (un extrait) de la structure de ma base de données qui me permet de gérer les informations d'enseignants :
matiere
id_mat
libelle_mat

enseigner_matiere
id_ens
id_mat


Voilà mon problème :
J'aimerais afficher la liste des matières non enseignées par un enseignant en particulier.
Je me suis donc dis que la solution serait de sélectionner toutes les matières et de retirer celles qui sont déjà présentes dans enseigner_matiere pour un id_ens donné.

Voilà ma requête actuelle (pour id_ens = 3) :
Code:
SELECT id_mat
FROM enseigner_matiere
WHERE id_mat NOT IN(
SELECT id_mat
FROM enseigner_matiere
WHERE id_ens = '3')
N.B. : Pour simplifier j'ai enlevé la jointure qui me permet également de récupérer le libellé de la matière dans la table matiere.

Erreur retournée :

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT id_mat FROM enseigner_matiere WHERE id_ens = '3' )
L

J'ai lu que les requêtes imbriquées n'étaient pas prises en compte dans des versions antérieures à la 4.1 de MySQL. J'utilise actuellement la version 5.0.22.

N'hésitez pas à me demander si vous avez besoin de plus d'informations ;)

Merci beaucoup !
 
WRInaute discret
euh un peu brouillon ca !
tu as pas fait une erreur dans cette req :
Code:
SELECT id_mat 
FROM enseigner_matiere 
WHERE id_mat NOT IN( 
SELECT id_mat 
FROM enseigner_matiere 
WHERE id_ens = '3')
y'a 2 fois enseigner_matiere !

Sinon essaye la clause HAVING.
 
WRInaute discret
Code:
SELECT id_mat 
FROM enseigner_matiere 
WHERE id_mat NOT IN( 
SELECT id_mat
WHERE id_ens = '3')
Est-ce que c'est ok ?

Sinon j'ai du mal à voir comment tu veux utiliser une clause HAVING. Je n'utilise pas de fonction d'agrégat et je vois mal comment en utiliser une :?
 
Discussions similaires
Haut