0

这是我的查询

从表名限制 1 中选择 object_construct('id', id, alpha, PARSE_JSON(null))

输出是 { "id" :1, "alpha":null }

但是当我将parse_jsonifnull结合使用时,它返回空对象{}无法按预期工作

从表名限制 1 中选择 object_construct('id',IFNULL(id, (PARSE_JSON(null))), alpha, IFNULL(alpha, (PARSE_JSON(null)))

以上返回 {}

但我需要有空值 { "id" : 1, "alpha" : null }

结合没有任何解决方案?

[问题更新]

谢谢费利佩霍法。

在您的回答中,最后一部分按预期工作。

SELECT OBJECT_CONSTRUCT('id', id, 'alpha', IFNULL(alpha, PARSE_JSON('null')))
FROM (SELECT 1 id, null alpha)
# {"alpha": null, "id": 1}

但是当我尝试以下方法时,它不起作用

SELECT OBJECT_CONSTRUCT(
'id', id, 
'alpha', IFNULL(alpha, PARSE_JSON('null'))
 ) 
FROM (SELECT id, alpha from tableName)
#{ "id" :1 }

它在使用 FROM 查询时有效:FROM (SELECT 1 id, null alpha)

使用我的 FROM 查询时不起作用:FROM (SELECT id, alpha from tableName)

希望破灭。

提前致谢

4

2 回答 2

1

我需要有空值 { "id" : 1, "alpha" : null }

您可以使用OBJECT_CONSTRUCT_KEEP_NULL而不是OBJECT_CONSTRUCT

SELECT OBJECT_CONSTRUCT_KEEP_NULL('id', id, 'alpha', alpha) from tableName;

SELECT OBJECT_CONSTRUCT_KEEP_NULL(*) from (SELECT id, alpha from tableName) sub;
于 2021-06-17T18:00:44.523 回答
0

这里的问题是问题的第一个陈述不正确。编码时PARSE_JSON(null)null不表示:

SELECT OBJECT_CONSTRUCT('id', id, alpha, PARSE_JSON(null))
FROM (SELECT 1 id, null alpha)

# {"id": 1}

要解决此问题,您必须PARSE_JSON('null')改为 - 并引用变量的名称:

SELECT OBJECT_CONSTRUCT('id', id, 'alpha', PARSE_JSON('null'))
FROM (SELECT 1 id, null alpha)

# {"alpha": null, "id": 1}

这样看起来更好。解决了这个问题,现在IF_NULL将按需要工作:

SELECT OBJECT_CONSTRUCT('id', id, 'alpha', IFNULL(alpha, PARSE_JSON('null')))
FROM (SELECT 1 id, null alpha)

# {"alpha": null, "id": 1}
于 2020-09-10T04:01:36.840 回答