2010-10-30 12 views
1

j'ai une table de transaction comme celui-cirecherche valeur différente dans une colonne

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

Comment puis-je utiliser la commande SQL pour trouver le client qui a acheté livre et chaussures ensemble? donc, le résultat ne peut être que le client 1. J'ai besoin de faire le projet Apriori, iv essayer de google, mais je ne sais pas la bonne phrase à googler, s'il vous plaît aidez-moi, merci beaucoup.

Répondre

3
SELECT cust_id FROM table WHERE item='book' 
INTERSECT 
SELECT cust_id FROM table WHERE item='shoe' 

http://ideone.com/V74E4

3

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 :-)

+0

celui-ci fonctionne !!! – sarah

+0

tu m'aides vraiment avec celui-ci, merci beaucoup ^^ – sarah

Questions connexes