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

编写SQL查询语句获取拥有橘色猫咪的客户全名并去重的需求

解决方法:查询拥有橘色猫咪的唯一客户全名

没问题,针对你的需求,我整理了几种靠谱的SQL查询方案,都能满足“即使客户有多只橘色猫也只返回一次”的要求,咱们一个个来看:

方法1:内连接 + DISTINCT 去重

这是最直观的写法,通过关联客户和宠物表筛选出目标记录,再用DISTINCT去掉重复的客户条目:

SELECT DISTINCT CONCAT(c.FirstName, ' ', c.LastName) AS FullName
FROM Customer c
INNER JOIN pets p ON c.Id = p.Id
WHERE p.animal = 'Cat' 
  AND p.color = 'Orange';

说明:

  • INNER JOIN会只保留同时在两张表中有匹配的记录,也就是养了宠物的客户;
  • DISTINCT会自动剔除重复的客户全名,完美解决“多只橘色猫导致重复”的问题;
  • 用CONCAT()拼接名字比直接用+更稳妥,哪怕FirstName或LastName为空,也不会让整个全名变成NULL。

方法2:EXISTS 子查询(性能更优)

如果你的数据量比较大,推荐用这个写法,EXISTS只要找到符合条件的记录就会停止检索,效率更高,而且天然不会产生重复:

SELECT CONCAT(c.FirstName, ' ', c.LastName) AS FullName
FROM Customer c
WHERE EXISTS (
    SELECT 1
    FROM pets p
    WHERE p.Id = c.Id
      AND p.animal = 'Cat'
      AND p.color = 'Orange'
);

说明:

  • 子查询会检查当前客户是否存在至少一只橘色猫咪,只要存在就会把该客户加入结果集;
  • 因为每个客户只会被检查一次,所以结果里自然不会有重复条目,不需要额外去重操作。

方法3:IN 子查询

这种写法逻辑清晰,先找出所有养橘色猫的客户ID,再根据ID匹配客户全名:

SELECT CONCAT(c.FirstName, ' ', c.LastName) AS FullName
FROM Customer c
WHERE c.Id IN (
    SELECT p.Id
    FROM pets p
    WHERE p.animal = 'Cat'
      AND p.color = 'Orange'
);

说明:

  • 子查询会返回所有符合条件的客户ID,IN操作符会自动对这些ID去重,所以最终的客户全名也不会重复。

注意事项:

  • 请确保p.animal和p.color的取值和你实际数据库中的数据一致,比如如果数据里是中文的“猫咪”“橘色”,就把条件改成p.animal = '猫咪' AND p.color = '橘色';
  • 如果客户的名字可能包含空格或者特殊字符,CONCAT依然能正常工作,不用担心拼接问题。

内容的提问来源于stack exchange,提问作者utaf buyukdama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:44:07