我有一个包含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。