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 (avec requête et non tous ses éléments) et pas ceux de l'autre table (avec requête).
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 :
La requête me semblait claire, et il devrait me lister (croyais-je, naïvement), Le produit (B) et éviter le produit (C)...
Code sql : 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 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')
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 ?
Partager