Interessante Anforderungen ... dies viel schneller sein würde und einfacher mit Aggregatfunktionen und Gruppierungen .. aber hier ist eine andere Art und Weise:
SELECT DISTINCT t1.store_id
FROM
Transactions t1
LEFT JOIN Transactions t2
ON t1.store_id = t2.store_id
AND t1.item_id <> t2.item_id
LEFT JOIN Transactions t3
ON t1.store_id = t3.store_id
AND t3.item_id NOT IN (t1.item_id, t2.item_id)
WHERE t3.store_id IS NULL
Die Abfrage funktioniert, indem von einem Speicher Datensatz zu einem anderen Datensatz für die Verbindung gleicher Laden, aber anderer Artikel. Es versucht dann, zu einem dritten Datensatz für dasselbe Geschäft, aber anderes Element beizutreten. Wenn es diesen Datensatz findet, verkauft das Geschäft mehr als zwei Elemente und wird in der WHERE
-Klausel ausgeschlossen.
Nur um Ihnen eine Vorstellung zu geben, ist hier, wie die Abfrage normal aussehen:
SELECT store_id
FROM Transactions
GROUP BY store_id
HAVING COUNT(DISTINCT item_id) < 3
+ 1'ed für die interessante Frage, aber warum Aggregate vermeiden? Ich wäre * sehr, sehr * neugierig, wenn ich beide von Michael geposteten Methoden vergleichen würde. – stefgosselin