Bonjour,

je me cogne à une requête qui parait assez simple mais que je n'arrive pas à réaliser.

J'ai 2 tables :

Product
--------
id_product = PK
...

Package_Language
------------------
id_product
id_language

pk = id_product + id_language

Ma requete est tout simplement de sortir la liste des id_product
qui sont en FRA et en NLD.
Une autre ceux qui ont FRA et PAS NLD
Et une troisième, ceux qui ont NLD et PAS FRA


J'ai essayé de faire ceci :

FRA + NLD
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
select distinct p.id_product
from package_language t1
inner join package_language t2 with(no lock) on t1.id_product = t2.id_product
inner join product p with(nolock) on p.id_product = t1.id_product
where t1.id_language = 'FRA'
and t2.id_language = 'NLD' 
and p.id_product_type = 1
=>2281 id_product FRA + NLD

FRA et PAS NLD
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
select distinct p.id_product
from package_language t1
inner join package_language t2 with(no lock) on t1.id_product = t2.id_product
inner join product p with(nolock) on p.id_product = t1.id_product
where t1.id_language = 'FRA'
and t2.id_anguage <> 'NLD' 
and p.id_product_type = 1
=>13650 id_product FRA

NLD et PAS FRA
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
select distinct p.id_product
from package_language t1
inner join package_language t2 with(no lock) on t1.id_product = t2.id_product
inner join product p with(nolock) on p.id_product = t1.id_product
where t1.id_language <>'FRA'
and t2.id_anguage = 'NLD' 
and p.id_product_type = 1
=>8171 id_product NLD

Je sais que c'est faux, soit d'un point de vue logique, soit d'un point de vue syntaxique car si je prends le total d'id_product différents dans la table package_language pour un id_product_type = 1 je trouve

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
select distinct t1.id_product 
from package_language t1
inner join package_language t2 with(nolock) on t1.id_product = t2.id_product
inner join product p with(nolock) on p.id_product = t1.id_product
where p.id_product_type= 1
Résultat : 19651 id_product différents

Donc FRA (sans NLD) + NLD (sans FRA) + FRA/NLD = 24102 ALors que je n'ai que 19 651 id_product différents dans ma table ...
Donc c'est clair que mes requêtes ne fonctionnent pas

Pouvez vous éclaircir ma lanterne svp?
Merci d'avance