Il existe deux options assez simples.
Vous pouvez rejoindre deux fois la table de vente, une fois par article. Si vous ignorez le DISTINCT
, vous pouvez obtenir des valeurs en double si le magasin vend plus d'un marteau ou thermomètre.
SELECT DISTINCT s.shopname
FROM shops s
JOIN sale s1 ON s.shopcode = s1.shopcode AND s1.product='hammer'
JOIN sale s2 ON s.shopcode = s2.shopcode AND s2.product='thermometer';
... ou vous pouvez trouver toutes les correspondances avec un marteau ou un thermomètre et compter le nombre de valeurs distinctes. S'il y a deux valeurs possibles et que vous obtenez les deux, vous êtes prêt.
SELECT s.shopname
FROM shops s
JOIN sale s1 ON s.shopcode = s1.shopcode
WHERE s1.product IN('hammer','thermometer')
GROUP BY s.shopname
HAVING COUNT(DISTINCT s1.product)=2;
Un SQLfiddle pour tester les deux .