You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何查询单表中相同ID的多条记录,筛选购买A未购买C的客户

SQL查询解决方案

实现思路

先筛选满足两个条件的客户:

  • 存在产品A的购买记录
  • 不存在产品C的购买记录
    再查询这些客户在表中的全部关联记录即可。

方案1:使用EXISTS子查询(性能最优,写法直观)

SELECT *
FROM `Table A` t1
WHERE 
  -- 筛选买过产品A的客户
  EXISTS (
    SELECT 1 FROM `Table A` t2 
    WHERE t2.`Customer ID` = t1.`Customer ID` 
    AND t2.`Product Name` = 'A'
  )
  -- 排除买过产品C的客户
  AND NOT EXISTS (
    SELECT 1 FROM `Table A` t3 
    WHERE t3.`Customer ID` = t1.`Customer ID` 
    AND t3.`Product Name` = 'C'
);

方案2:使用分组过滤后关联查询

SELECT t1.*
FROM `Table A` t1
INNER JOIN (
  -- 先筛选出符合条件的客户ID列表
  SELECT `Customer ID`
  FROM `Table A`
  GROUP BY `Customer ID`
  HAVING 
    SUM(CASE WHEN `Product Name` = 'A' THEN 1 ELSE 0 END) > 0
    AND SUM(CASE WHEN `Product Name` = 'C' THEN 1 ELSE 0 END) = 0
) t2 ON t1.`Customer ID` = t2.`Customer ID`;

注意事项

因为表名Table A和字段名Customer ID、Product Name包含空格,查询时需要用对应数据库的标识符包裹符:

  • MySQL 用反引号 `
  • SQL Server 用方括号 []
  • PostgreSQL 用双引号 "

上述示例为MySQL兼容写法,代入你提供的样例数据测试,输出结果和预期完全一致。

内容的提问来源于stack exchange,提问作者Ben Inm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 20:18:04