0

sql不是我的强项

从 postgres 9.6 升级到 10.6,我从这个查询中得到一个错误:

SELECT id, (CASE WHEN jsonb_typeof(content->'user')='array' THEN jsonb_array_elements(content -> 'user')
         ELSE content::jsonb->'user' END) As att FROM event;

错误: set returning functions are not allowed in CASE

结果我回来了(从 v 9.6 开始):

id, att
1, {"name": "Andrew"},
2, {"name": "Stacey"},
3, null

'user' 元素也可以为空。

这就是“内容”列的样子(两者之一)

{"user": [{"name": "Andrew", "country_code": "GBR"}]]
{"user": null}

任何帮助请求都停留了一段时间

4

1 回答 1

1

我想你可以使用

SELECT id, att
FROM event,
jsonb_array_elements(CASE WHEN jsonb_typeof(content->'user')='array'
  THEN content -> 'user'
  ELSE jsonb_build_array(content->'user')
END) AS user(att);
于 2020-05-05T18:46:03.723 回答