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

如何按相同department_id组合条件删除数据库表中指定数据?

数据清理SQL解决方案

原始数据表

department_idprotectnature
10环境保护警方
10红喉蜂鸟保护
10美洲豹保护
10鬃狼保护
10动物非政府组织
10售卖动物
0动物虐待
0售卖动物
1售卖动物
1动物虐待

需求说明

  • 删除同一department_id下同时存在以下两类记录的对应行:protect='售卖'且nature='动物'、protect='动物'且nature='虐待'
  • 若同一department_id下存在protect='动物'且nature='非政府组织'的记录,则保留该部门的protect='售卖'且nature='动物'和protect='动物'且nature='非政府组织'记录

错误SQL尝试

DELETE FROM table WHERE (protect = 'sale of' and protect = 'animal' and nature = 'animals') and department_id = department_id

期望结果表

department_idprotectnature
10环境保护警方
10红喉蜂鸟保护
10美洲豹保护
10鬃狼保护
10动物非政府组织
10售卖动物

正确的SQL删除语句

DELETE FROM your_table_name
WHERE 
    department_id IN (
        SELECT department_id
        FROM your_table_name
        GROUP BY department_id
        HAVING 
            COUNT(CASE WHEN protect = '动物' AND nature = '非政府组织' THEN 1 END) = 0
            AND COUNT(CASE WHEN protect = '售卖' AND nature = '动物' THEN 1 END) > 0
            AND COUNT(CASE WHEN protect = '动物' AND nature = '虐待' THEN 1 END) > 0
    )
    AND (
        (protect = '售卖' AND nature = '动物')
        OR (protect = '动物' AND nature = '虐待')
    );

关键逻辑说明

  1. 子查询筛选目标部门:先找出符合删除条件的department_id——这类部门没有"动物-非政府组织"的记录,但同时存在需要删除的两类目标记录
  2. 精准删除目标行:外层语句仅针对这些部门,删除protect='售卖'且nature='动物'或protect='动物'且nature='虐待'的行
  3. 替换语句中的your_table_name为你的实际表名即可执行

内容的提问来源于stack exchange,提问作者Help my Brother

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:07:22