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

如何编写SQL脚本删除name重复、registered为true的fuelType=1行?

解决方法

要实现删除指定条件的重复行,我们可以先定位目标行的ID,再执行删除操作,以下是具体实现方案:

条件明确

需要删除的行需同时满足:

  • 该行的fuelType等于1
  • 该行的registered为true
  • 该行的name在表中存在重复(即同一name对应至少两行数据)

实现SQL

方法一:子查询定位目标行

DELETE FROM cars
WHERE id IN (
    SELECT id
    FROM cars
    WHERE fuelType = 1
      AND registered = true
      AND name IN (
          SELECT name
          FROM cars
          WHERE fuelType = 1
          GROUP BY name
          HAVING COUNT(*) > 1
      )
);

方法二:窗口函数标记重复行

如果你的数据库支持窗口函数(如MySQL 8.0+、PostgreSQL、SQL Server等),可以用更直观的方式:

WITH duplicate_rows AS (
    SELECT id,
           ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) AS row_num
    FROM cars
    WHERE fuelType = 1
)
DELETE FROM cars
WHERE id IN (
    SELECT dr.id
    FROM duplicate_rows dr
    JOIN cars c ON dr.id = c.id
    WHERE dr.row_num > 1
      AND c.registered = true
);

关于示例的补充说明

根据你提供的表格数据,fuelType=1的行中没有name重复的记录(Abarth、Aston Martin、Bentley各仅一行),所以上述SQL执行后不会删除任何行。如果你的示例中id=11的行需要被删除,可能是条件中的fuelType=1应为fuelType=2,修改后的SQL如下:

DELETE FROM cars
WHERE id IN (
    SELECT id
    FROM cars
    WHERE fuelType = 2
      AND registered = true
      AND name IN (
          SELECT name
          FROM cars
          WHERE fuelType = 2
          GROUP BY name
          HAVING COUNT(*) > 1
      )
);

执行此SQL后,id=11的Ferrari行(registered=true且name重复)会被删除,符合你的示例预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:55:18