поиск другого значения в одном столбце - PullRequest
1 голос
/ 30 октября 2010

у меня есть такая таблица транзакций

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

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

Ответы [ 2 ]

3 голосов
/ 30 октября 2010

Вы можете использовать самостоятельное соединение:

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

3 голосов
/ 30 октября 2010
SELECT cust_id FROM table WHERE item='book'
INTERSECT 
SELECT cust_id FROM table WHERE item='shoe'

http://ideone.com/V74E4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...