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

如何筛选出在orders表有匹配记录的customers表无重复行?

筛选存在对应订单的客户记录(去重)

根据你给出的两张表,要筛选出customers表中在orders表有对应记录的行,同时保证结果无重复,有以下几种常用的SQL实现方式:

方法一:使用INNER JOIN + DISTINCT

通过内连接关联两张表,再用DISTINCT去除因为一个客户多条订单产生的重复记录:

SELECT DISTINCT c.id, c.name
FROM customers c
INNER JOIN orders o ON c.id = o.customer_id;

执行后结果:

+----+-------------+
| id |    name     |
+----+-------------+
|  1 | roger       |
|  3 | harold      |
|  4 | tom         |
+----+-------------+

方法二:使用EXISTS子查询

EXISTS会检查子查询是否存在匹配记录,找到即停止检索,性能更优;且基于customers单表查询,天然不会产生重复:

SELECT c.id, c.name
FROM customers c
WHERE EXISTS (
    SELECT 1
    FROM orders o
    WHERE o.customer_id = c.id
);

该语句结果与方法一完全一致,无需额外去重操作。

方法三:使用IN子查询

通过子查询提取所有存在订单的客户ID,再筛选customers表:

SELECT c.id, c.name
FROM customers c
WHERE c.id IN (
    SELECT o.customer_id
    FROM orders o
);

即使子查询返回重复的客户ID,IN会自动处理去重,最终结果无重复客户记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:43:16