如何在使用同一表中的不同列值条件查询时处理空值

Posted

技术标签:

【中文标题】如何在使用同一表中的不同列值条件查询时处理空值【英文标题】:How to handle null values while querying with distinct column values condition from the same table 【发布时间】:2019-03-04 13:31:18 【问题描述】:

有一个名为 Products 的表,其中包含 100 列。我正在运行一个不同的 column1,column2,column3....column6 postgresql 查询,结果如下所示:

2    Product A  300  2017  Null  Null
2    Product A  300  2017  Null  Null

由于空值,我得到两行而不是单行。如何解决这个问题?非常感谢您的帮助。

【问题讨论】:

我不确定一个不同的查询本身是否应该给你这个结果集。请包括您的实际查询和一些示例数据。 【参考方案1】:

null 与自身不同,不同的检查引擎盖下的平等。而不是

select distinct field1, field2, ..., fieldn

你可以有这样的选择子句:

select distinct coalesce(field1, 'Empty') AS field1, ..., coalesce(fieldn, 'Empty') AS fieldn

对于可为空的字段,您只需要 coalesce

【讨论】:

一个挑剔的更正:NULL 确实 not 与自身不同,但不知道两个未知值是否相等 ((NULL = NULL) IS NULL)。 现在,我得到 Empty 用重复行替换 Null 。也试过 COALESCE(NULLIF(Field1,''), Field2) 。问题仍未解决。 @Tony 你能编辑你的问题并向我们展示你目前的尝试吗?【参考方案2】:

删除上述重复项的一种方法是使用 GROUP BY 需要不同值的列。所以像这样的

SELECT column1, column2, column3, ...,column6
FROM sometable
GROUP BY column1, column2, column3, ...,column6

【讨论】:

嗨,这正是我想要做的。但是,结果集中仍然出现重复行,某些列的值为空。如果我删除给定条目具有空值的列,然后运行查询,我只会得到一行。仅当存在空值时才会发生行重复,因为 distinct 无法处理它们。

以上是关于如何在使用同一表中的不同列值条件查询时处理空值的主要内容,如果未能解决你的问题,请参考以下文章

从表中的不同条件中选择COUNT

如何有条件的更新sql 数据表中的列值?

SQL如何查询出某一列中不同值出现的次数?

mysql同一个表中如何根据不同的条件将查询到的记录放到一个结果集中

oracle 如何把同一个表的同一个字段按条件分成不同的字段查询出来结果集?例如:

如何根据另一列的条件查询同一列两次?