如何列出客户未购买的产品?

Posted

技术标签:

【中文标题】如何列出客户未购买的产品?【英文标题】:How to list products NOT bought by a customer? 【发布时间】:2016-11-27 11:27:55 【问题描述】:

我有 3 个表 - customerproductcustomerproduct(包含客户和他们购买的产品的链接表)。 我想列出每个客户不是购买的产品。

示例

客户

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 添加了另一种使用不存在的方法。您可能需要稍微更改查询。但它会给你想法。

以上是关于如何列出客户未购买的产品?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 按最初购买的产品列出其他购买的产品并计算买家

从 PaymentIntent 获取购买的产品

列出没有销售的客户和产品

如何将列表框中列出的产品数量直接减去我的产品数据库? (MySQL的)

在 WooCommerce 订单页面上列出单独购买的产品的类别和子类别

GA BigQuery - 购买产品 x 的用户也购买了产品 abc 然后仅过滤列出完整的交易,其中 x 是交易的一部分