这是一个例子

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

我想从向量类型为1的vector表中添加timevectors
有时有一个类型设置为1的向量(总是只有一个,这就是为什么我没有在查询中使用LIMIT),但有时没有一个类型设置为1的向量。
在第二种情况下,上面查询中的子查询将返回null,因此time + null将是null
因此,如果子查询返回null,我需要进行回退,如下所示:
... (time + ((SELECT vector FROM vectors WHERE type=1) OR 0)) AS modified_time
我怎么能做到?

最佳答案

如果您知道只有一行,那么让我们使用max()来保证它。. . 然后您可以使用coalesce()

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

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

10-04 23:02