首页 > 解决方案 > 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";

标签: postgresqlnullduplicatessql-delete

解决方案


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",'');

推荐阅读