2011-01-20 14 views
2

假設您有一個包含兩個字段的簡單表格:帳戶和項目: 帳戶可以有多個項目。例如:SQL問題連詞

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

我該如何編寫一個查詢,以便我可以選擇具有某些指定項目集的所有帳戶。例如,我將如何編寫查詢,以便選擇將字段分配給蘋果和梨(在示例賬戶11和13中)的賬戶。

謝謝你的幫助。

埃利奧特

+0

順便說一句:這個術語是[Relational division](http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division /) – 2011-01-23 18:35:26

回答

12

你可以構造一個查詢,將只留下蘋果和梨的設置,然後按賬戶並計算不同的項目。如果它與預期的計數相符(在這種情況下爲2),那麼該賬戶具有完整集合。

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

+1您似乎是唯一一個真正瞭解問題的人 – Lamak 2011-01-20 21:52:57

0
SELECT DISTINCT account From Table WHERE item in ('Apples','Pears') 
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 2011-01-20 21:51:57

0

你可以使用這樣的查詢。

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

該查詢將返回所有賬號的列表,該賬號包含蘋果或梨。獨特確保每個帳戶只顯示一次。