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

如何使用SQL提取仅包含"upload"类型的唯一ID

解决方案:提取仅含upload类型的唯一ID

这问题我日常写SQL时经常碰到,核心就是要筛选出那些**所有关联记录的type字段都是upload**的ID,排除掉存在其他类型(比如out、delete)的ID。下面给你几种实用的实现方式,适配大多数主流数据库:

方法1:GROUP BY + HAVING(最直观通用)

这是最容易理解的写法,通过分组后过滤条件来实现:

SELECT id
FROM your_table_name
GROUP BY id
HAVING COUNT(DISTINCT type) = 1 
   AND MAX(type) = 'upload';

逻辑说明:

  • GROUP BY id 将同一ID的所有记录归为一组
  • COUNT(DISTINCT type) = 1 确保该ID只有一种类型
  • MAX(type) = 'upload' 验证这唯一的类型就是upload(用MIN(type)也可以,因为只有一种值)

方法2:NOT EXISTS(性能友好,适合大数据表)

如果你的表数据量较大,这种利用子查询排除不符合条件的写法通常性能更优,尤其是当id和type字段有索引时:

SELECT DISTINCT id
FROM your_table_name t1
WHERE type = 'upload'
  AND NOT EXISTS (
    SELECT 1
    FROM your_table_name t2
    WHERE t2.id = t1.id
      AND t2.type != 'upload'
  );

逻辑说明:

  • 先筛选出所有type为upload的ID
  • 再通过NOT EXISTS排除掉那些存在非upload类型记录的ID,剩下的就是仅含upload的ID

方法3:EXCEPT(部分数据库支持)

如果你的数据库支持EXCEPT语法(比如PostgreSQL、SQL Server),可以用集合差的思路来实现:

SELECT DISTINCT id FROM your_table_name WHERE type = 'upload'
EXCEPT
SELECT DISTINCT id FROM your_table_name WHERE type != 'upload';

逻辑说明:

  • 先获取所有包含upload类型的ID集合
  • 减去所有包含非upload类型的ID集合,最终结果就是仅含upload的ID

你可以根据自己使用的数据库和数据规模选择合适的写法,亲测这几种方法都能得到你期望的bb、q5结果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:17:38