Hello! 欢迎来到小浪云!


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


avatar
小浪云 2024-11-10 40

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

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

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

考虑以下场景:

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

credit company name phone id pid
99284 传媒有限公司 张三 3930 21d4f7 NULL
99284 传媒有限公司 张三 3930 21d4f7 6ec897
99284 传媒有限公司 王五 1895 2c6dcd 21d4f7
99284 传媒有限公司 王五 1895 a8c70b 21d4f7
99284 传媒有限公司 李四 9894 33db09 21d4f7
99284 传媒有限公司 李四 9894 703e16 null
99284 传媒有限公司 李四 9894 0faa54 21d4f7

目标是删除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为空的行。

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

credit company name phone id pid
99284 传媒有限公司 李四 9894 703e16 null

保留以下行:

credit company name phone id pid
99284 传媒有限公司 张三 3930 21d4f7 6ec897
99284 传媒有限公司 王五 1895 2c6dcd 21d4f7
99284 传媒有限公司 王五 1895 a8c70b 21d4f7
99284 传媒有限公司 李四 9894 33db09 21d4f7
99284 传媒有限公司 李四 9894 0faa54 21d4f7

相关阅读