我正在尝试运行查询,对于选定的人,它会根据购买历史记录推荐商品,以及其他人购买该商品的商品。
示例:
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
真的很感激任何帮助,谢谢。
答案 0 :(得分: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);