SQL查询中DISTINCT不生效,返回结果ClientID重复如何解决?
问题根因
DISTINCT 关键字的去重规则是对 SELECT 后列出的所有字段的整体组合去重,而非仅作用于第一个字段。你当前的查询同时返回了 ClientID、ClientName、PurchaseID 三个字段:同一个客户如果有多笔购买记录,就会对应多个不同的PurchaseID,此时即使ClientID相同,整行数据的组合也属于唯一值,自然会出现重复的ClientID。
修复方案
你的需求是获取有过购买行为的去重客户列表,不需要返回购买ID,选择以下任意一种方案即可:
- 方案1:直接移除
PurchaseID字段,保留DISTINCT
调整后SELECT DISTINCT c.ClientID, c.ClientName FROM Purchases o JOIN Clients c ON o.ClientID = c.ClientID ORDER BY c.ClientID ASC;DISTINCT仅对客户ID和客户名称的组合去重,每个客户只会返回一行结果。 - 方案2:用
EXISTS子查询实现,性能更优
数据量较大时推荐该写法,不需要关联全量购买表后再去重,只要判断客户存在购买记录就会返回,执行效率更高:SELECT c.ClientID, c.ClientName FROM Clients c WHERE EXISTS ( SELECT 1 FROM Purchases o WHERE o.ClientID = c.ClientID ) ORDER BY c.ClientID ASC;
内容的提问来源于stack exchange,提问作者user17374731
相关产品推荐
相关产品推荐

