Sql 在postgres中提供空值的减法

Sql 在postgres中提供空值的减法,sql,postgresql,Sql,Postgresql,我有一个表temp(id int,name text)和另一个表temp2(id int,times int)。临时存储器(1,'a'),(2,'b')和(3,'c')。temp2存储(1,1)和(2,2)。我想找出一个角色的id和它出现的次数之间的区别。因为“c”不出现在temp2列中,所以其时间为空。此外,请注意,我不能以任何方式编辑给定的表。以下是我所做的:- SELECT name, temp.id, CASE WHEN times=null THEN temp.id ELSE

我有一个表temp(id int,name text)和另一个表temp2(id int,times int)。临时存储器(1,'a'),(2,'b')和(3,'c')。temp2存储(1,1)和(2,2)。我想找出一个角色的id和它出现的次数之间的区别。因为“c”不出现在temp2列中,所以其时间为空。此外,请注意,我不能以任何方式编辑给定的表。以下是我所做的:-

SELECT name, temp.id,
CASE WHEN times=null THEN temp.id
    ELSE temp.id-times
END
FROM temp LEFT OUTER JOIN temp2
ON (temp.id=temp2.id);
但是,问题是它仍然给我这个输出:-

name | id | case
------+----+------
a | 1 | 0
b | 2 | 0
c | 3 |
(3排)
(注意c的大小写为空)。请帮我解决这个问题。谢谢

使用
coalesce()

您的具体问题是比较
=NULL
。正确的方法是
为NULL
。在SQL中,任何东西都不能“等于”NULL,因此永远不会返回TRUE

但是,
COALESCE()
是一种更简单的逻辑表达方式。

使用
COALESCE()

您的具体问题是比较
=NULL
。正确的方法是
为NULL
。在SQL中,任何东西都不能“等于”NULL,因此永远不会返回TRUE

但是,
COALESCE()
是一种更简单的逻辑表达方式

SELECT name, temp.id,
       temp.id - COALESCE(times, 0)
FROM temp LEFT OUTER JOIN
     temp2
     ON temp.id = temp2.id;