postgresql - Postgres查询通过许多参数删除重复的行
问题描述
我有一个包含字段的表:Guide、FileSource、CodeName。所有这些字段都是文本类型。某些字段具有相同的值,有时这些值为 NULL。我进行了删除具有相同参数的重复行的查询,但是,当某些值等于 NULL 时,没有任何已删除的行。如何更改将删除具有相同参数的行的查询包括等于 NULL 的值?
DELETE FROM public.TableName as T1
USING public.TableName as T2
WHERE T1.ctid > T2.ctid
AND T1."Guide" = T2."Guide"
AND T1."FileSource" = T2."FileSource"
AND T1."CodeName" = T2."CodeName";
解决方案
NULL 不能直接比较(用“=”)。您可以使用如下的 coalesce 语句来处理 NULL:
DELETE FROM public.TableName as T1
USING public.TableName as T2
WHERE T1.ctid > T2.ctid
AND COALESCE(T1."Guide",'') = COALESCE(T2."Guide",'')
AND COALESCE(T1."FileSource",'') = COALESCE(T2."FileSource",'')
AND COALESCE(T1."CodeName",'') = COALESCE(T2."CodeName",'');
推荐阅读
- sql - 我将如何将文本结果聚合到一个单一的临时列中?
- c++ - 更改入口点的目的是什么( main() 函数)
- python-3.x - python jupyter的vscode无法显示视频
- typescript - 在 vscode 上:'tsc' 不是内部或外部命令、可运行程序或批处理文件
- django - Django 3.0 - 多语言模型 - 如何为当前使用的语言制作 __str__ 返回值?
- javascript - 循环通过承诺和等待?
- google-cloud-platform - 如何将 cuda 驱动程序添加到 gcp Ubuntu vm?
- android - 如何让这个 BroadCastReceiver 工作?
- c - 如何在 C 中完全删除动态数组而不仅仅是单个元素
- java - Spring boot - google oauth2,在数据库中存储刷新令牌