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

SQL按group by分组删除同组QuestionId全为NULL的行

SQL实现方案

直接通过分组筛选出需要整组删除的Id,再执行批量删除即可,不需要用到窗口函数,逻辑简单且兼容性好。

核心写法(适配PostgreSQL、SQL Server等支持同表子查询删除的数据库)

DELETE FROM 你的实际表名
WHERE Id IN (
    SELECT Id
    FROM 你的实际表名
    GROUP BY Id
    HAVING COUNT(QuestionId) = 0
);

逻辑说明

  • 子查询按Id字段分组,通过COUNT(QuestionId)统计每组内非空的QuestionId数量:COUNT(列名)语法会自动忽略值为NULL的记录,因此当同组所有QuestionId都是NULL时,统计结果为0,正好对应需要整组删除的Id。
  • 外层语句直接删除所有Id匹配上述筛选结果的行,即可实现“同组全为NULL则删全组,有任意非空值则全组保留”的规则。

MySQL兼容写法

MySQL不支持在DELETE语句中直接查询同表作为删除条件,给子查询套一层临时表别名即可绕开限制:

DELETE FROM 你的实际表名
WHERE Id IN (
    SELECT t.Id FROM (
        SELECT Id
        FROM 你的实际表名
        GROUP BY Id
        HAVING COUNT(QuestionId) = 0
    ) t
);

规则验证

用你给出的示例数据测试:

原始表数据:

IdQuestionId
1'MyQuestionId'
1NULL
2NULL
2NULL
  • Id=1分组内存在非空QuestionId,COUNT(QuestionId)结果为1,不会被删除,两条记录完整保留
  • Id=2分组内所有QuestionId均为NULL,COUNT(QuestionId)结果为0,对应两条记录会被全部删除
    完全匹配你要求的删除规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:12:20