如何与NULL值连接?



我有一个包含NULL值的列(CHECK_ID)的表。该列的数据类型为:INT。如果这些是空值,我返回一个'ND'值,并将该列转换为STRING。

我还有另一个包含相同列的表。此列的数据类型已经是STRING,并且包含'ND'记录。

但是,当我将这些表连接在一起时,它不会返回我为其设置'ND'的任何NULL值。

select 
COALESCE(a.CHECK_ID::TEXT, 'ND') as CHECK_ID,
from TABLE_A a
left join TABLE_B f
on f.CHECK_ID::text = a.CHECK_ID::text

你知道我怎样才能解决这个问题吗?

您还需要在JOIN中执行COALESCE。

select 
COALESCE(a.CHECK_ID::TEXT, 'ND') as CHECK_ID,
from TABLE_A a
left join TABLE_B f
on f.CHECK_ID::text = COALESCE(a.CHECK_ID::TEXT, 'ND')

或LEFT OUTER JOIN也可以达到这个目的。

select 
COALESCE(a.CHECK_ID::TEXT, 'ND') as CHECK_ID,
from TABLE_A a
left out join TABLE_B f
on f.CHECK_ID::text = a.CHECK_ID::text

在你的SQL中,你只在SQL的选择部分(返回数据)更改为ND,在连接中它们仍然是空的(源数据)。INNER JOIN只返回两个表中匹配的行,这就是为什么不返回它们的原因。因此,您可以在连接语句中添加COALESCE。或者如果TABLE_A中的所有NULL值都需要为ND,那么LEFT OUTER JOIN将工作,因为LEFT OUTER也从右侧表返回不匹配的行,并将所有字段设置为NULL。

最新更新