在一列中搜索不同的值

时间:2010-10-30 07:47:41

标签: sql database

我有一个像这样的交易表

cust_id | item
---------------------
1       | book
1       | shoe
2       | book
3       | shoe

我如何使用SQL命令找到一起购买书籍和鞋子的顾客? 所以,结果只能是客户1。 我需要做Apriori项目,iv尝试谷歌,但我不知道用谷歌搜索正确的短语,请帮助我,非常感谢。

2 个答案:

答案 0 :(得分:3)

SELECT cust_id FROM table WHERE item='book'
INTERSECT 
SELECT cust_id FROM table WHERE item='shoe'

http://ideone.com/V74E4

答案 1 :(得分:3)

您可以使用自我加入:

select a.cust_id
from transaction a, transactions b
where a.cust_id = b.cust_id
  and a.item = 'book'
  and b.item = 'shoe'

使用对transactions表的两个引用会创建所有bookshoe买方的笛卡尔积(每行与每一行相结合),当受{的限制时{1}}子句,排除所有仅购买其中一个的子句,如下所示,其中只有客户1满足所有要求(a.cust_id = b.cust_id,其中X 'book' X 'shoe'是任何客户ID,但在结果集的第1列和第3列中都相同):

X

也许有一种方法可以使用明确的a.cust_id | a.item | b.cust_id | b.item | include? ----------+--------+-----------+--------+--------- 1 | book | 1 | book | 1 | shoe | 1 | book | 2 | book | 1 | book | 3 | shoe | 1 | book | 1 | book | 1 | shoe | yes 1 | shoe | 1 | shoe | 2 | book | 1 | shoe | 3 | shoe | 1 | shoe | 1 | book | 2 | book | 1 | shoe | 2 | book | 2 | book | 2 | book | 3 | shoe | 2 | book | 1 | book | 3 | shoe | 1 | shoe | 3 | shoe | 2 | book | 3 | shoe | 3 | shoe | 3 | shoe | 语句来实现这一点,但是,因为我使用足够智能的DBMS来解决它,我不在乎。我不会说哪个 DBMS,因为我不想发动宗教战争: - )