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

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

在关系型数据库中,当需要删除具有特定字段重复但同时另一列值为 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

以上就是如何删除数据库中重复字段且特定列为空的行?的详细内容,更多请关注昆居客【www.kunjuke.com】。

相关推荐:

SQLAlchemy 异步查询中动态选择字段与关系的正确方法

在 SQLAlchemy 异步会话中,当需同时指定返回的具体列(如 ModelA.id, ModelA.name)和预加载的关系(如 ModelA.bs)时,直接使用 select(*columns) 会导致 ArgumentError——因其生成纯表达式实体,无法应用 selectinload 等关系加载选项。正确解法是基于完整模型构造查询,再用 with_only_columns() 限定字段...
· Python · 13120

SQLAlchemy 异步查询中动态选择字段与关系的正确实践

在 SQLAlchemy 异步会话中,当需同时指定具体列(如 ModelA.id, ModelA.name)和预加载关系(如 ModelA.bs)时,直接使用 select(*columns) 会导致 ArgumentError: Query has only expression-based entities 错误;正确解法是基于完整模型构造查询,再通过 with_only_columns() ...
· Python · 216100

Django怎么实现模型字段加密_Python使用自定义Field实现自动加解密

加密字段需继承Field重写from_db_value/to_python/get_prep_value方法,用Fernet实现自动加解密,密文长度至少为原文2倍,禁止加密可搜索字段,密钥须安全存储且不硬编码。 加密字段必须绕过 Django 默认序列化流程 Django 的 Model.save() 和查询过程会直接操作数据库字段值,如果在 save() 里手动调用加密逻辑,但没拦截 __get...
· Python · 16836

透视表怎么计算毛利率_插入计算字段实战【财务指标】

可在数据透视表中插入计算字段动态计算毛利率:先建好含销售收入和销售成本的基础透视表,再通过【数据透视表分析】→【计算字段】输入公式=(销售收入-销售成本)/销售收入,最后设置百分比格式并验算结果。 如果您已在Excel中创建数据透视表,但发现原数据源中缺少毛利率这一关键财务指标,则可通过插入计算字段直接在透视表内完成动态计算。以下是实现该目标的具体操作路径: 一、确认数据源结构并创建基础透视表 插...

数据透视表怎么改变布局_拖拽字段排版方法【界面设置】

可通过五种方法调整数据透视表布局:一、拖拽字段至行/列/值/筛选区域改变结构;二、切换压缩/大纲/表格布局形式;三、在字段区域内上下拖拽或右键调整层级顺序;四、启用合并单元格并居中对齐标签;五、设置空单元格与错误值的默认显示文本。 如果您已创建数据透视表但发现字段排列混乱、行列结构不符合分析需求,则可能是由于字段未按逻辑关系正确放置在行、列、值或筛选区域。以下是调整数据透视表布局的多种拖拽与界面设...

如何在Python中检查列表是否为空_利用if not list_obj的隐式布尔值判断

if not list_obj最常用,因其语义清晰、性能最优——直接利用空容器布尔值为False的特性,无需函数调用或元素比较;但对自定义类、None或含falsy元素的列表需谨慎区分。 为什么 if not list_obj 是检查空列表最常用的方式 Python 中所有空容器(包括 []、{}、set())默认布尔值为 False,非空则为 True。因此 if not list_obj 直接...
· Python · 216523

DeepSeek V4缺少model参数_请求体字段缺失与拼写检查【字段】

错误“缺少model参数”需三步修复:一、确认请求体顶层含合法字符串型"model"字段;二、确保值严格为deepseek-v4-pro或deepseek-v4-base;三、排查SDK是否覆盖或删除该字段。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 如果您调用DeepSeek V4 API时收到错误提示“缺少model参数”,可能是由...
· AI · 288712

Pandas如何判断数据框是否为空_利用empty属性进行逻辑校验

df.empty 是判断 DataFrame 是否为空的最优方式,它通过内部标志位快速返回布尔值,同时检查行列维度,语义清晰且性能最优。 df.empty 是最直接的判断方式 用 df.empty 就行,它返回布尔值,True 表示空 DataFrame(0 行或 0 列),False 表示非空。别写 len(df) == 0 或 df.shape[0] == 0 —— 虽然结果一样,但 empt...
· Python · 2889