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