SQL:将两列合并为一个查询结果

时间:2019-11-18 15:14:19

标签: mysql sql

我有一个表,代表相机的配置。

假设具有主键 x 的相机具有以下配置,作为json字符串,以后我将其用作python中的字典:{A:[...], B:[...]}

现在,我们决定为表添加一个主键为null的条目,并将其设置为项目默认值。该表中只有一个条目,其主键为null,即其配置列值为{A:[...], C:[...]}

此刻,我使用一个非常简单的查询来返回摄像机及其配置:

SELECT pk, configuration FROM static.cameras

是否有一种方法可以返回摄像机及其配置,但是可以使用项目默认值(如果有)填充缺少的键?  因此对于字符串中的每个键,如果相机没有该键,它将从默认键填满。示例:

|  pk  |  configuration  |
|  01  |[A:10, B:20, C:1]|
|  02  |[A:200, B:3]     |
|  03  |[D:1000]         |
| NULL |[A:0, D:2]       |

所需查询的结果将是:

01    [A:10, B:20, C:1, D:2]
02    [A:200, B:3, D:2]
03    [A:0, D:1000]

我知道在查询后使用python轻松完成,遍历结果,但是有没有办法使用SQL语法呢?

1 个答案:

答案 0 :(得分:1)

假设configuration包含有效的JSON对象,则可以使用json_contains_path()进行过滤,并使用json_set()来更新值:

update mytable set configuration  = json_set(configuration, '$.D', 2)
where not json_contains_path(configuration, '$.D')