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 很陌生,但这是我到目前为止所得到的,之后我真的不知道如何去做。

目前它只提供所选客户购买了“Lani Morgan”的商品,但我希望它显示其他客户购买的商品,他们购买了“Lani Morgan”购买的商品。

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 回答