MySQL:连接JSON字段上的表并获取JSON数据

MySQL:连接JSON字段上的表并获取JSON数据,mysql,sql,grafana,Mysql,Sql,Grafana,我想在Grafana中创建一个这样的表格面板: +------------+--------------+------------------+ | Name | Access level | Max Access level | +------------+--------------+------------------+ | Tony Stark | 5 | 5 | +------------+--------------+-

我想在Grafana中创建一个这样的表格面板:

+------------+--------------+------------------+
| Name       | Access level | Max Access level |
+------------+--------------+------------------+
| Tony Stark | 5            | 5                |
+------------+--------------+------------------+
这可以通过SQL查询完成。我有MySQL作为数据源

我有一个叫做机器和人员的数据库。 在db机器内部,我有用于单个机器的表

该表以id和json对象作为列

机器

+----+---------------------------------------------+
| id | payload (JSON)                              |
+----+---------------------------------------------+
| 1  | {                                           |
|    |     "rack": {                               |
|    |         "0": {                              |
|    |             "internal": "20.42706840974966" |
|    |         }                                   |
|    |     },                                      |
|    |     "personel": {                           |
|    |         "id": "0xb7c9bd9bc1f7d852",         |
|    |         "access_level": "5",                |
|    |         "access_level_max": "5"             |
|    |     },                                      |
|    |     "information": {                        |
|    |         "ID": "machine_1"                   |
|    |     }                                       |
|    | }                                           |
+----+---------------------------------------------+
然后我有一张桌子,里面有个人

个人,个人

+----+--------------------+------------+------+-------+----------+----------+-------------+
| id | hex                | name       | post | shift | superior | location | designation |
+----+--------------------+------------+------+-------+----------+----------+-------------+
| 1  | 0xb7c9bd9bc1f7d852 | Tony Stark | CEO  | NULL  | NULL     | NULL     | NULL        |
+----+--------------------+------------+------+-------+----------+----------+-------------+
现在,, 我需要根据json对象的十六进制键从personel表中获取数据 在机器1中

我是这样做的:

SELECT
  name as "Name"
FROM personel.personel
  WHERE exists(
SELECT
    json_extract(payload, '$.personel.id')
FROM machines.machine_1 as Table_A
    ORDER BY arrived desc
LIMIT 1
)
我不知道如何创建一个查询,它将产生3列,其中名称从
personel.personel
读取,由
machines.machine\u 1
中json对象的十六进制值标识,其余值直接来自
machines.machine\u 1
中的json对象

+------------+--------------+------------------+
| Name       | Access level | Max Access level |
+------------+--------------+------------------+
| Tony Stark | 5            | 5                |
+------------+--------------+------------------+
如果这是一个不正确的方式如何处理这种事情,请让我知道。 我想我可以重做这个解决方案,但由于其他原因,我希望坚持使用JSON对象

谢谢你的帮助


致以最诚挚的问候。

以下查询可以解决您的问题:

select 
    p.name as 'Name',
    JSON_UNQUOTE(payload->"$.personel.access_level") as 'Access level',
    JSON_UNQUOTE(payload->"$.personel.access_level_max") as 'Max Access level'
from machines
left join personel p on p.hex = JSON_UNQUOTE(payload->"$.personel.id");

试穿一下

非常感谢。我把问号改了一点,所以现在看起来像这样。选择p.name,JSON_UNQUOTE(有效载荷->“$.personel.access_level”)作为“访问级别”,jsonquote(有效载荷->“$.personel.access_level_max”)作为“最大访问级别”,从machine_1左侧加入personel.personel p on p.hex=JSON_UNQUOTE(有效载荷->“$.personel.id”),订单到达描述限制1再次感谢。最好的重播。