我有一个像这样的交易表
cust_id | item --------------------- 1 | book 1 | shoe 2 | book 3 | shoe
我如何使用SQL命令找到一起购买书籍和鞋子的顾客? 所以,结果只能是客户1。 我需要做Apriori项目,iv尝试谷歌,但我不知道用谷歌搜索正确的短语,请帮助我,非常感谢。
答案 0 :(得分:3)
SELECT cust_id FROM table WHERE item='book'
INTERSECT
SELECT cust_id FROM table WHERE item='shoe'
答案 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
表的两个引用会创建所有book
和shoe
买方的笛卡尔积(每行与每一行相结合),当受{的限制时{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,因为我不想发动宗教战争: - )