SQL Server 2016查询:获取客户未关联的行业对应产品
客户所属行业未购产品查询方案
假设表结构
基于问题描述,定义两张核心表的字段:
- 行业产品表(
IndustryProducts):Industry:VARCHAR(50),行业名称ProductName:VARCHAR(50),行业Top3产品名称
- 客户表(
CustomerPurchases):CID:VARCHAR(10),客户IDIndustry:VARCHAR(50),客户所属行业PurchasedProduct:VARCHAR(50),客户已购产品名称
SQL Server 2016 查询语句
SELECT cp.CID, ip.Industry, ip.ProductName AS UnpurchasedProduct FROM CustomerPurchases cp INNER JOIN IndustryProducts ip ON cp.Industry = ip.Industry WHERE NOT EXISTS ( SELECT 1 FROM CustomerPurchases cp_inner WHERE cp_inner.CID = cp.CID AND cp_inner.PurchasedProduct = ip.ProductName ) GROUP BY cp.CID, ip.Industry, ip.ProductName ORDER BY cp.CID, ip.ProductName;
逻辑说明
- 用
INNER JOIN关联客户表和行业产品表,仅保留客户所属行业的全部Top3产品。 NOT EXISTS子句筛选出当前客户从未购买过的产品,排除已购记录。GROUP BY用于去重,避免因客户表存在多条同ID购买记录导致未购产品重复返回。
示例结果(CID 001)
执行后会返回该客户Retail行业下未购买的产品:
| CID | Industry | UnpurchasedProduct |
|---|---|---|
| 001 | Retail | Silver |
| 001 | Retail | Gold |
内容的提问来源于stack exchange,提问作者user19824185
相关产品推荐
相关产品推荐

