首页 > 文章列表 > 如何删除数据库中重复字段且特定列为空的行?

如何删除数据库中重复字段且特定列为空的行?

420 2025-04-09

如何删除数据库中重复字段且特定列为空的行?

如何删除数据库重复字段且特定列为空的行

在关系型数据库中,当需要删除具有特定字段重复但同时另一列值为 null 的行时,可以使用 sql 查询。

考虑以下场景:

数据的datas表中存储了以下信息:

creditcompanynamephoneidpid
99284传媒有限公司张三393021d4f7null
99284传媒有限公司张三393021d4f76ec897
99284传媒有限公司王五18952c6dcd21d4f7
99284传媒有限公司王五1895a8c70b21d4f7
99284传媒有限公司李四989433db0921d4f7
99284传媒有限公司李四9894703e16null
99284传媒有限公司李四98940faa5421d4f7

目标是删除credit、company、name、phone和id字段相同但pid为空的行,而保留pid不为空的行。

解决方案:

DELETE FROM datas 
WHERE pid IS NULL AND (credit, company, name, phone, id, rootid) IN (
    SELECT credit, company, name, phone, id, rootid 
    FROM datas 
    WHERE pid IS NOT NULL
);

此查询使用以下步骤:

  1. 从datas表中选择所有pid为空的行。
  2. 使用in子查询从pid不为空的行中选择credit、company、name、phone和id字段的组合。
  3. 删除与子查询中选择的组合匹配的pid为空的行。

执行此查询将删除以下行:

creditcompanynamephoneidpid
99284传媒有限公司李四9894703e16null

保留以下行:

creditcompanynamephoneidpid
99284传媒有限公司张三393021d4f76ec897
99284传媒有限公司王五18952c6dcd21d4f7
99284传媒有限公司王五1895a8c70b21d4f7
99284传媒有限公司李四989433db0921d4f7
99284传媒有限公司李四98940faa5421d4f7
来源:1731066402