Наивно:
SELECT DISTINCT customer FROM tblname t1
WHERE EXISTS (SELECT * FROM tblname WHERE product = 'Pen' AND customer = t1.customer)
AND EXISTS (SELECT * FROM tblname WHERE product = '19" LCD Screen' AND customer = t1.customer)
Но в целом, я думаю, что есть еще один вопрос такого рода, и вам нужно дать более подробную информацию об окружающей среде и диапазоне параметров.
Обратите внимание, что я не обязательно защищаю этот подход, но я даю его (и обозначаю его как наивный, что означает, что он очень прост и очень мало учитывает с точки зрения индексации таблиц), потому что:
- Это очень переносимый ANSI - ничего особенного не происходит
- Совершенно ясно (без объединений) для новичка SQL анализировать и получать понимание на основе множеств
- Он явно расширяем по параметрам (возможно, для динамического SQL)
Недостатки:
- Сканирование таблицы, кто знает, насколько плохим будет этот план выполнения
- Коррелированные подзапросы, связанные с проблемами с # 1
- многословие, повтор
- Любой SELECT * (даже внутри EXISTS) может поднять бровь