如何列出客户未购买的产品?
Posted
技术标签:
【中文标题】如何列出客户未购买的产品?【英文标题】:How to list products NOT bought by a customer? 【发布时间】:2016-11-27 11:27:55 【问题描述】:我有 3 个表 - customer
、product
和 customerproduct
(包含客户和他们购买的产品的链接表)。
我想列出每个客户不是购买的产品。
示例
客户
Tom
Jim
Harry
产品
Shampoo
Brush
Shoe
Box
客户产品
Jim | box
Jim | brush
Tom | brush
Harry | shampoo
所以,我的查询应该显示:
Jim | shampoo
Jim | shoe
Tom | shampoo
Tom | shoe
Tom | box
...
我需要使用查找来获取我的客户和产品。制作单独的表 CustomersandProducts 表并手动输入它不是一种选择。 当然,必须有一种方法可以使用 NOT EXISTS、NOT IN 等来获得结果?
【问题讨论】:
你试过了吗?这是作业题吗? 我有。我没有得到想要的结果。如果我不使用查找并使用查询向导查找不匹配的记录,它可以解决。但这对我的问题没有帮助。 请告诉我们查询。 这只是给了我一个空白。我知道查找使它变得复杂。也许它必须在 VB 中设计。在这种情况下,我该怎么办?是否可以仅使用 SQL 获得结果? SELECT Table1.Customer, Table2.Product, Table3.ID FROM Table1,Table2,Table3;这是查询1 【参考方案1】:首先,您需要将产品加入客户和产品,以获得客户和产品的所有排列和组合。然后只需在实际的客户产品表中查找。
尝试以下查询:
select c.cname,p.pname
customers c,
product p
where c.name,p.name not in (
select cp_i.cname,cp_i.pname
from customerproduct cp_i)
如果任何表中的行数很高,则此查询对资源非常敏感(cpu/io 等)。
另一种方法:
select c.cname,p.pname
customers c,
product p
where not exists (
select 1
from customerproduct cp_i
where cp_i.cname=c.cname
and cp_i.pname=p.pname)
【讨论】:
非常感谢!将不得不修改它以尝试我自己的数据库,但至少它给了我一个开始! 我在访问查询中输入了以下内容,但出现语法错误:SELECT Table1.Customer, Table2.Product FROM Table1, Table2 WHERE Table1.Customer, Table2.Product NOT IN (SELECT Table3.Customer, Table3 .Product FROM Table3); 在 Table1.Customer, Table2.Product NOT IN.. 之前添加括号 (Table1.Customer, Table2.Product) NOT IN...也让我知道确切的错误描述。 我添加了括号。得到这个:“您编写的子查询可以返回多个字段,而无需在主查询的 FROM 子句中使用 EXISTS 保留字。修改子查询的 SELECT 语句以仅请求一个字段。 @SougataNandy 添加了另一种使用不存在的方法。您可能需要稍微更改查询。但它会给你想法。以上是关于如何列出客户未购买的产品?的主要内容,如果未能解决你的问题,请参考以下文章
如何将列表框中列出的产品数量直接减去我的产品数据库? (MySQL的)
在 WooCommerce 订单页面上列出单独购买的产品的类别和子类别
GA BigQuery - 购买产品 x 的用户也购买了产品 abc 然后仅过滤列出完整的交易,其中 x 是交易的一部分