如果value1为NULL,则将value1添加到value2或将0(0)添加到value2

时间:2017-06-20 15:30:06

标签: sql postgresql conditional

这是一个例子

SELECT
(time + (SELECT vector FROM vectors WHERE type=1)) AS modified_time
FROM times;

我想从vector表中向time添加vectors,其中向量的类型为1。 有时候有一个类型设置为1的向量(总是只有一个,这就是我在查询中没有使用LIMIT的原因),但有时候没有一个类型设置为1的向量。

在第二种情况下,上述查询中的子查询将返回null,因此time + null将为null

所以我需要做一个后备,以防子查询返回null,例如:

... (time + ((SELECT vector FROM vectors WHERE type=1) OR 0)) AS modified_time

我该怎么做?

3 个答案:

答案 0 :(得分:1)

如果您知道只有一行,请使用max()保证。 。 。然后你可以使用coalesce()

SELECT (time + (SELECT COALESCE(MAX(vector), 0) FROM vectors WHERE type = 1)) AS modified_time
FROM times;

还有其他方法,但如果将子查询保留在SELECT子句中,我发现这是最简单的方法。

答案 1 :(得分:1)

尝试使用COALESCE

SELECT
(time + COALESCE((SELECT vector FROM vectors WHERE type=1),0)) AS modified_time
FROM times;

答案 2 :(得分:1)

我认为你想要这样做:

SELECT
(time + ISNULL(SELECT vector FROM vectors WHERE type=1),0 OR Other Subquery) AS modified_time
FROM times;

所以如果有一个以上的Aplly SUM来载:

SELECT
(time + ISNULL(SELECT SUM(vector) FROM vectors WHERE type=1),0 OR Other Subquery) AS modified_time
FROM times;