我有以下形式的查询:
SELECT
col1,
col2,
(
SELECT my_value FROM my_second_table WHERE my_table.value = ...
) AS potentially_null_column
FROM my_first_table
当
SELECT my_value FROM my_second_table WHERE my_table.value = ...
未返回任何行时,则 potentially_null_column
设置为 null
。
这与标量子查询上的 Postgres 文档一致:https://www.postgresql.org/docs/8.3/sql-expressions.html#SQL-SYNTAX-SCALAR-SUBQUERIES:
但是,如果在特定执行过程中子查询没有返回任何行,则不会出现错误;标量结果被视为空。)
问题是,如果没有返回行,我希望
potentially_null_column
成为字符串 'UNSET'
而不是 null
。不幸的是,coalesce
在这里不起作用,因为没有返回要合并的行。如何为标量子查询指定非空默认值?
正如评论中所说,
COALESCE
功能就是您正在寻找的:
SELECT *,
COALESCE((
SELECT potentially_null_column
FROM my_second_table
WHERE [...]
), 'UNSET')
FROM my_first_table
SQL 不允许在单个列中返回混合类型,因此如果您的数据不是
VARCHAR
/TEXT
等类似数据,则不允许返回常量字符串而不是 NULL
。INTEGER
/NUMERIC
,您可以将 NULL
替换为 0
,而不是 'UNSET'
:
SELECT *,
COALESCE((
SELECT potentially_null_column
FROM my_second_table
WHERE [...]
), 0)
FROM my_first_table