我有一个简单的示例表:
| F1| F2|
| --|--|
| 1 | 2 |
| 1 | 3 |
我想为每一行创建一个JSON数组-但是,如果第二个对象的值是3,我不想包含它。
所以我希望结果是:
[{'num',1},{'num',2}]
[{'num',1}]
如果我尝试这个:
select JSON_ARRAY(JSON_OBJECT('num',f1),
if(f2<>3,JSON_OBJECT('num',f2),JSON_OBJECT())
) from sample_table;
它是关闭的,但它放置了一个空对象而不是空的:
[{"num": 1}, {"num": 2}]
[{"num": 1}, {}]
有没有更好的处理方法?否则,我想第二个选择,是否有一种简单的方法在事实发生后删除空对象(比如JSON_ARRAY函数的 Package 器)
我想如果我把IF放在开头,那就可以了。但还有更好的办法吗
select if(f2<>3, JSON_ARRAY(JSON_OBJECT('num',f1),JSON_OBJECT('num',f2)),
JSON_ARRAY(JSON_OBJECT('num',f1))
) from sample_table;
2条答案
按热度按时间tzcvj98z1#
您可以使用
JSON_ARRAY_APPEND
实现您想要的结果,利用以下事实:路径在JSON文档中未标识任何值的对将被忽略
当你不想把对象添加到数组中时,使用一个虚拟路径。
示例数据的输出:
| 结果|
| --|
| [{“num”:1},{“num”:2]|
| [{“num”:1}]|
db-fiddle上的演示
bzzcjhmw2#
https://dbfiddle.uk/1SJR2xkU