Vous pouvez utiliser un auto-jointure:
select a.cust_id
from transaction a, transactions b
where a.cust_id = b.cust_id
and a.item = 'book'
and b.item = 'shoe'
L'utilisation de deux références à la table transactions
crée un produit cartésien (chaque ligne associée à chaque ligne) de book
et shoe
acheteurs qui, lorsqu'ils sont limités par la clause a.cust_id = b.cust_id
, excluent tous ceux qui seulement ont acheté l'un d'entre eux, comme ci-dessous, où seulement client 1 satisfait toutes les exigences (X 'book' X 'shoe'
, où X
est tout numéro de client, mais les mêmes dans les deux colonnes 1 et 3 du jeu de résultats):
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 |
Il y a probablement une façon de le faire avec un explicite join
déclaration aussi, mais, puisque j'utilise un SGBD qui est assez intelligent pour le comprendre, je m'en fous. Je ne vais pas indiquer qui DBMS puisque je ne veux pas commencer une guerre religieuse :-)
celui-ci fonctionne !!! – sarah
tu m'aides vraiment avec celui-ci, merci beaucoup ^^ – sarah