Es gibt zwei ziemlich einfache Optionen.
Sie können zweimal am Verkaufstisch teilnehmen, einmal pro Artikel. Wenn Sie den DISTINCT
überspringen , erhalten Sie möglicherweise doppelte Werte, wenn das Geschäft mehr als einen Hammer oder ein Thermometer verkauft.
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';
...oder Sie finden alle Übereinstimmungen mit Hammer oder Thermometer und zählen, wie viele verschiedene Werte es gibt. Wenn es zwei mögliche Werte gibt und Sie beide erhalten, sind Sie fertig.
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;
Eine SQLfiddle, um beides zu testen .