MySQL查询-获取尚未购买单个产品ID的所有部分的客户

MySQL查询-获取尚未购买单个产品ID的所有部分的客户,mysql,sql,Mysql,Sql,好的,我有两张桌子。一个表用于产品列表,一个表用于订单。我的表1中将有几个相同的ProductID,因为每个ProductID都有几个部分,即:第1部分,共7部分 零件号将是一个编号。我如何设计查询以查找购买了其中一个零件号而不是单个产品ID的所有零件号的所有客户 我只是在学习MySQL的基础知识,所以非常感谢您的帮助 表1-产品清单 UniqueIDKey Product ID PartNumber 表2-订单 UniqueIDKey Product ID Ordered PartNumbe

好的,我有两张桌子。一个表用于产品列表,一个表用于订单。我的表1中将有几个相同的ProductID,因为每个ProductID都有几个部分,即:第1部分,共7部分

零件号将是一个编号。我如何设计查询以查找购买了其中一个零件号而不是单个产品ID的所有零件号的所有客户

我只是在学习MySQL的基础知识,所以非常感谢您的帮助

表1-产品清单

UniqueIDKey
Product ID
PartNumber
表2-订单

UniqueIDKey
Product ID Ordered
PartNumber Ordered
Customer ID
因此,订单可能如下所示:

UniqueIDKey: 77
Product ID Ordered: 1001
PartNumber Ordered: 3
Customer ID: 2000001
UniqueIDKey     Product ID     PartNumber
77              1001           1
78              1001           2
79              1001           3
我的Table1产品列表中的几行可能如下所示:

UniqueIDKey: 77
Product ID Ordered: 1001
PartNumber Ordered: 3
Customer ID: 2000001
UniqueIDKey     Product ID     PartNumber
77              1001           1
78              1001           2
79              1001           3
之前,您需要知道每个产品下的零件总数 了解哪些客户购买了产品的某些部分,而不是 整体 由表别名B括起的查询提供了 每种产品。 表别名A包含的查询为每个 配对购买的零件总数。 现在剩下的是匹配购买的零件总数是否为 少于产品零件的总数。 在这种方法中,查询如下所示:

使用交叉联接获取客户、产品id和零件号的所有组合。将join orders表保留在此结果上,以获取尚未订购产品中所有零件的客户

select c.customer_id,p.product_id
from (select product_id,part_number from product_list) p 
cross join (select distinct customer_id from orders) c
left join orders o on p.product_id=o.product_id and p.part_number=o.part_number and c.customer_id=o.customer_id
group by c.customer_id,p.product_id
having count(o.part_number) < count(p.part_number)

你的策略是什么?我是说到目前为止你都试过什么?请随意分享。目前,每个ProductID的零件数量随机变化。ProductID通常有1到35个部件。有什么建议吗?产品零件数量可变有什么问题?你有什么问题吗?不同的产品可能有不同数量的零件。这似乎是正确的。也许我做错了什么,但这个查询对我来说运行得非常慢。有什么加速的建议吗?