0

選択した人に対して、購入履歴とそのアイテムを購入した他の人が購入したものに基づいてアイテムを推奨するクエリを実行しようとしています。

例:

Customer 1 purchases item A, and B.
Customer 2 purchases item B. 
Customer 2 is recommended, item A.  

これで使用される4つのテーブルがあり、関連する行名とともにそれらをリストします。

Customer
PK: Cust_ID

Session
PK: Ses_ID
FK: Cust_ID

Order
PK: Order_ID
FK: ItemRef_ID
FK: Session_ID

Item
PK: Item_ID

私はSQLにかなり慣れていませんが、これまでに得たものは次のとおりです。それに続いて、SQLを実行する方法がまったくわかりません。

現在、選択した顧客が「ラニモーガン」を購入したアイテムのみが表示されますが、代わりに、「ラニモーガン」を購入した他の顧客が購入したアイテムを表示したいと思います。

SELECT Item_Desc, Item_ID 
FROM  rbickers.Item

LEFT JOIN rbickers.Order 
ON Item.Item_id = Order.itemref_id 

LEFT join rbickers.Session 
ON Order.Session_id = Session.Ses_id 

left join rbickers.customer
On customer.cust_ID = session.Cust_ID

Where Cust_First = "Lani" and Cust_Last = "Morgan"

GROUP BY Item_Type

LIMIT 10 

どんな助けでも本当にありがたいです、ありがとう。

4

1 に答える 1

1

したがって、基本バージョンと提供されたスキーマを使用すると、customer1 が購入したのではなく、customer1 が購入した他の顧客が購入したアイテムを購入した場合、すべてのアイテムをチェックすることで実装されていることがわかります。このスキーマでは、指定されたすべてのテーブルを結合する必要があるため、提供した結合のビューを作成するようお願いします。

create view CustomerItems as 
SELECT *
FROM  rbickers.Item

LEFT JOIN rbickers.Order 
ON Item.Item_id = Order.itemref_id 

LEFT join rbickers.Session 
ON Order.Session_id = Session.Ses_id 

left join rbickers.customer
On customer.cust_ID = session.Cust_ID

#Where Cust_First = "Lani" and Cust_Last = "Morgan"

その後:

select distinct item.* from item, CustomerItems cust1 where 
cust1.Cust_First="Lani" and cust1.Cust_Last="Morgan" and 
item.Item_ID not in(
select Item_ID from CustomerItems cust2 where cust1.Cust_ID=cust2.Cust_ID) 
and exists(select * from CustomerItems cust3 where 
cust3.Cust_ID<>cust1.cust_ID and item.Item_ID=cust3.Item_ID);
于 2012-11-18T15:56:28.517 に答える