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

如何查询ID_CARD表中仅存在初始DRAFT版本、无更高版本的记录

SQL查询调整方案

涉及表结构及数据

PROJECT表

ID   PROJECT_ID
123  93773
245  98287
675  93889

ID_CARD表

PROJECT_ID    CODE         Version    STATUS
245          98287001      1          DRAFT
245          98287002      2          ARCHIVED
245          98287003      3          ACTIVE
245          98287004      4          DRAFT
675          93889001      1          DRAFT
123          93773001      1          DRAFT

需求说明

查询ID_CARD表中仅存在Version=1的初始DRAFT版本、不存在Version≥2更高版本的记录,预期返回结果:

PROJECT_ID    CODE         Version    STATUS
675          93889001      1          DRAFT

原SQL问题

原有SQL仅筛选了状态为DRAFT的记录,没有排除存在更高版本的项目对应记录,且关联PROJECT表的条件错误,因此返回结果不符合要求。

修正后SQL

方案1:使用NOT EXISTS逻辑(性能更优,推荐)

SELECT ic.*
FROM id_card ic
-- 若不需要PROJECT表的字段可删除下面这行JOIN语句
LEFT JOIN project p ON p.id = ic.project_id
WHERE ic.status = 'DRAFT' 
  AND ic.version = 1
  -- 排除同项目下存在更高版本的记录
  AND NOT EXISTS (
    SELECT 1 
    FROM id_card ic2 
    WHERE ic2.project_id = ic.project_id 
      AND ic2.version >= 2
  )

方案2:使用分组聚合筛选

SELECT ic.*
FROM id_card ic
-- 若不需要PROJECT表的字段可删除下面这行JOIN语句
LEFT JOIN project p ON p.id = ic.project_id
INNER JOIN (
  -- 先筛选出最大版本号为1的项目ID
  SELECT project_id
  FROM id_card
  GROUP BY project_id
  HAVING MAX(version) = 1
) t ON ic.project_id = t.project_id
WHERE ic.status = 'DRAFT' AND ic.version = 1

两种方案均可得到符合要求的返回结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:15:02