Requête mySQL qui fait des siennes

Fermé
NeoGeo - 3 janv. 2010 à 12:37
 NeoGeo - 3 janv. 2010 à 13:03
Bonjour,
après 2 jours complets de tests inefficaces, je m'en remets à vos intelligences.
Voici mon problème, qui semble simple (et pourtant !)
Le but de ma requête (en simplifiant ici avec des éléments):
Sortir des données qui contiennent des composants d'une table et pas ceux de l'autre table.
Exemple :
J'ai 5 tables (Champs):
Produit (NumProduit;NomProduit)
Naturel (NumNaturel;NomNaturel)
Chimique (NumChimique;NomChimique)
NaturelProduit (NumNaturel;NumProduit) ->lie les réf des produits contenant du chimique
ChimiqueProduit (NumChimique;NumProduit) -> lie les réf des produits contenant du chimique
J'ai un champs formulaire dans lequel je rentre des noms de produit.
Je rentre un nom de produit (A) et je veux qu'il m'affiche un autre produit (B) contenant au moins un des produits NATUREL contenus dans le produit (A) mais AUCUN des produits CHIMIQUEs contenus de ce même produit (A). Disons que le NumProduit du Produit(A) est 1 et celui du Produit(B) est 2. Imaginons aussi (C) que je ne veux pas voir apparaitre (car il contient des CHIMIQUEs de A).
(A) est lié aux NumNaturel 1 et 2, (B) aux NumNaturel 2 et 3, (C) aux NumNaturel 2 et 4.
Même liaisons pour les NumChimiques afin de simplifier.
J'ai testé beaucoup de requêtes MySQL. La plus proche de réussir :
Select DISTINCT `NomProduit`, `NumProduit`, NaturelProduit.NumNaturel, ChimiqueProduit.NumChimique FROM `Produit` INNER JOIN NaturelProduit ON Produit.NumProduit = NaturelProduit.NumProduit INNER JOIN ChimiqueProduit ON Produit.NumProduit = ChimiqueProduit.NumProduit WHERE NumNaturel IN (SELECT DISTINCT NumNaturel FROM NaturelProduit WHERE NaturelProduit.NumProduit = '1') AND NumChimique NOT IN (SELECT DISTINCTNumChimique FROM ChimiqueProduit WHERE ChimiqueProduit.NumProduit = '1')
La requête me semblait claire, et il devrait me lister (croyais-je, naïvement), Le produit (B) et éviter le produit (C)...
Que nenni non point ! Il m'affiche le produit (C) contenant pourtant le NumChimique 2, contenu également dans (A).
Il semble, par contre, que si (C) contient TOUS les CHIMIQUE de (A) (soit 1 et 2 pour A et C), celui-ci n'apparaisse pas...
Une idée du problème ?

1 réponse

Oups, je corrige un point : Le Produit(B) n'EST PAS LIE (ne CONTIENT PAS) les NUMCHIMIQUE 2 et 3 mais, par exemple, uniquement 5 et 6 (Sinon, forcément il ne devrait pas non plus apparaitre).
0