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

如何查询满足特定条件的重复值行?SQL数据表筛选求助

SQL查询实现方案

数据表结构

现有数据表结构及数据如下:

country | group | offer | type | list
--------|-------|-------|------|-----
UK      | A     | 1     | AA   | 1
UK      | A     | 2     | BB   | 1
UK      | A     | 3     | CC   | 2
IE      | A     | 4     | AA   | 2
IE      | A     | 5     | BB   | 2
IE      | A     | 6     | CC   | 1
UK      | B     | 7     | AA   | 3
UK      | B     | 8     | BB   | 4
UK      | B     | 9     | CC   | 4

查询要求

需要返回满足以下两个条件的所有行:

  • 行的type字段值为CC
  • 该行的list值,与同一country、同一group下,type为AA或BB的行的list值一致

期望结果

country | group | offer | type | list
--------|-------|-------|------|-----
UK      | B     | 9     | CC   | 4

实现方法

方法一:使用EXISTS子查询

通过子查询验证当前CC类型的行,是否在同country、同group下存在AA/BB类型且list值匹配的行:

SELECT t.*
FROM your_table t
WHERE t.type = 'CC'
AND EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.country = t.country
      AND t2.group = t.group
      AND t2.type IN ('AA', 'BB')
      AND t2.list = t.list
);

方法二:使用自连接查询

通过自连接关联同country、同group的行,筛选出符合条件的记录,用DISTINCT避免重复结果:

SELECT DISTINCT t.*
FROM your_table t
JOIN your_table t2
  ON t.country = t2.country
  AND t.group = t2.group
  AND t.list = t2.list
WHERE t.type = 'CC'
  AND t2.type IN ('AA', 'BB');

两种方法都能实现需求:EXISTS子查询在数据量较大时通常性能更优,找到匹配项后就停止查找;自连接的方式逻辑更直观,便于理解关联关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:05:35