0

これは私のクエリです

テーブル名から object_construct('id', id, alpha, PARSE_JSON(null)) を選択 制限 1

出力は { "id" :1, "alpha":null } です。

しかし、parse_jsonifnullと組み合わせると、空のオブジェクト{}が返され、期待どおりに動作しません

select object_construct('id',IFNULL(id, (PARSE_JSON(null)), alpha, IFNULL(alpha, (PARSE_JSON(null))) from tablename limit 1

上記は {} を返します

しかし、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

null 値が必要です { "id" : 1, "alpha" : null }

OBJECT_CONSTRUCTの代わりにOBJECT_CONSTRUCT_KEEP_NULLを使用できます。

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 に答える