2010-10-30 2 views
1

у меня есть таблица транзакций, как этотпоиск другого значения в одном столбце

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

как я могу использовать команду SQL, чтобы найти клиент, который купил книгу и обувь вместе? Итак, результатом может быть только клиент 1. Мне нужно сделать проект Apriori, iv попробовать google, но я не знаю правильную фразу, которую нужно искать в googled, пожалуйста, помогите мне, спасибо большое.

ответ

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 покупателей, которые, если они ограничены положением a.cust_id = b.cust_id, исключают все, кто купил только один из них, как указано ниже, где только клиент 1 удовлетворяет все требования (X 'book' X 'shoe', где X является любой идентификатор клиента, но одни и те же в обеих колонках 1 и 3 из результирующего набора):

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 | 

Там, наверное, способ сделать это с явным join, но, поскольку я использую СУБД, которая достаточно умна, чтобы понять это, мне все равно. Я не буду заявлять , который СУБД, так как я не хочу начинать религиозную войну :-)

+0

этот работает !!! – sarah

+0

u действительно помогите мне с этим, спасибо много ^^ – sarah

Смежные вопросы