SQL-запрос для выбора из одного столбца, но нескольких значений - PullRequest
1 голос
/ 14 марта 2012

Это моя таблица.

id  customer        product 
1   Tizag           Pen 
4   Gerald Garner   19" LCD Screen  
5   Tizag           19" LCD Screen  

Я хочу выбрать клиента, у которого есть и «Перо», и «19» «ЖК-экран». Итак, результатом будет клиент «Тизаг».

Как я могу это сделать.

Спасибо и всего наилучшего, Рупак Банерджи.

Ответы [ 3 ]

7 голосов
/ 14 марта 2012

Попробуйте это:

SELECT customer FROM table t1
JOIN table t2 USING( customer )
WHERE t1.product = 'Pen'
AND t2.product = '19" LCD Screen'

Однако запрос должен измениться, если вы измените количество продуктов. Возможно, есть лучший способ сделать это, но я думаю, что это сработает.

4 голосов
/ 14 марта 2012

Наивно:

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)

Но в целом, я думаю, что есть еще один вопрос такого рода, и вам нужно дать более подробную информацию об окружающей среде и диапазоне параметров.

Обратите внимание, что я не обязательно защищаю этот подход, но я даю его (и обозначаю его как наивный, что означает, что он очень прост и очень мало учитывает с точки зрения индексации таблиц), потому что:

  1. Это очень переносимый ANSI - ничего особенного не происходит
  2. Совершенно ясно (без объединений) для новичка SQL анализировать и получать понимание на основе множеств
  3. Он явно расширяем по параметрам (возможно, для динамического SQL)

Недостатки:

  1. Сканирование таблицы, кто знает, насколько плохим будет этот план выполнения
  2. Коррелированные подзапросы, связанные с проблемами с # 1
  3. многословие, повтор
  4. Любой SELECT * (даже внутри EXISTS) может поднять бровь
1 голос
/ 14 марта 2012
SELECT CUSTOMER
FROM YOURTABLE yt1,YOURTABLE yt2
WHERE yt1.customer=yt2.customer
  AND yt1.product='Pen'
  AND yt2.product=''19" LCD Screen';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...