2011-01-20 3 views
2

Предположим, у вас есть простая таблица с двумя полями: учетная запись и элемент: У учетной записи может быть несколько элементов. Например:SQL question conjation

Account Item 
11   Apples 
11   Pears 
11   Crackers 
12   Apples 
12   Bannanas 
12   Cookies 
13   Pears 
13   Carrots 
13   Apples 

Как написать запрос, чтобы я мог выбрать все учетные записи с определенным набором элементов. Например, как мне написать запрос, чтобы я выбрал учетные записи, где полям присваиваются как яблоки, так и груши (в примерах 11 и 13).

Благодарим за помощь.

Elliott

+0

BTW: Термин для этого - [Реляционное подразделение] (http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division /) –

ответ

12

Вы можете создать запрос, который оставит только яблоки и груши в наборе, то группа по счету и подсчет различных предметов. Если он соответствует ожидаемому счету (в этом случае 2), то учетная запись имеет полный набор.

select account 
from tbl 
where item in ('apples','pears') 
group by account 
having count(distinct item) = 2 
+0

+1 Вы, кажется, единственный, кто на самом деле понял, что было задано – Lamak

0

Вы можете использовать автообъединение для доступа к информации из двух строк одной таблицы сразу:

SELECT ai0.Account 
FROM accountitems AS ai0 
JOIN accountitems AS ai1 ON ai0.Account=ai1.Account 
WHERE ai0.Item='Apples' 
AND ai1.Item='Pears' 
+0

Вам не хватает 'DISTINCT' или' GROUP BY' – Lamak

+0

Только если были разрешены абсолютно одинаковые строки, что было бы необычным подходом IMO. – bobince

0

Вы можете использовать запрос, как это.

SELECT Distinct Account From MyTable WHERE Item = 'Apple' or Item = 'Pears'; 

Этот запрос вернет список всех учетных записей, в которых элемент является яблоком или грушами. Distinct гарантирует, что каждая учетная запись отображается только один раз.