我有一个JSONB字段,其中包含这个结构中的一个值:
[
{
"type": "small",
"name": "Josh",
"greeting": "Hello buddy!",
"hobby": "billiards",
"place": "Barcelona"
},
{
"type": "big",
"name": "Aziz",
"greeting": "Hey man!",
"hobby": "tennis",
"place": "Montpellier"
}
]如果type等于“大”,我想包括这个输出:
{
"greeting": "Hey man! How're you doing Aziz?",
"place": "Montpellier"
}type值,我不希望整个输出为空。相反,作为后盾,type值的输出值等于“小”。type等于"small“的回退,则输出一个空字符串或NULL值,但不对整个查询结果作废。或者,如果不存在值,则最好不包括这些键。我知道我可以使用CONCAT将值组合成一个值,但不知道如何构建和集成这个查询。我无法循环遍历array并输出与我的过滤器匹配的object值。尝试过CASE,但仍然无法得到我想要的结果。
我使用PostgreSQL 13。
发布于 2021-07-31 05:47:59
如果存在大小,则返回JSON的单个列,否则为NULL:
WITH records AS (
SELECT * FROM JSONB_TO_RECORDSET(
'[
{
"type": "small",
"name": "Josh",
"greeting": "Hello buddy!",
"hobby": "billiards",
"place": "Barcelona"
},
{
"type": "big",
"name": "Aziz",
"greeting": "Hey man!",
"hobby": "tennis",
"place": "Montpellier"
}
]'
) as record(type VARCHAR, name VARCHAR, greeting VARCHAR, hobby VARCHAR, place VARCHAR)
)
SELECT JSONB_BUILD_OBJECT(
'greeting', FORMAT('%s How''re doing %s?', greeting, name),
'place', place
)
FROM records
WHERE type IN ('big', 'small')
ORDER BY type
LIMIT 1;https://dba.stackexchange.com/questions/295935
复制相似问题