我有一个表temp(id int,name text)和另一个表temp2(id int,times int)。临时存储(1,'a'),(2,'b')和(3,'c')。 temp2存储(1,1)和(2,2)。我想找到一个字符的id和它来的次数之间的区别。由于“ c”未出现在temp2列中,因此其时间为null。此外,请注意,我无法以任何方式编辑给定的表。这是我所做的:-
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 rows)
(请注意,对于c,大小写为null)。请帮我解决这个问题。谢谢!
答案 0 :(得分:1)
使用coalesce()
:
SELECT name, temp.id,
temp.id - COALESCE(times, 0)
FROM temp LEFT OUTER JOIN
temp2
ON temp.id = temp2.id;
您的特定问题是比较= NULL
。正确的方法是IS NULL
。在SQL中,任何事物都不能等同于NULL
,因此永远不会返回TRUE
。
但是,COALESCE()
是表达逻辑的一种简单方法。