如何使用JSON字段联接MySQL表?

时间:2019-07-08 09:53:32

标签: mysql

我有两个要执行联接查询的表。

Sensors是一个表,其中的记录涉及传感器元数据。 组合表是根据一些用户定义的公式将多个传感器数据组合为一个传感器的表。

传感器:

| sensor_id | attribute | operating_voltage | ... |
| 1         | temp      | 5V                | ... |
| 2         | humidity  | 5V                | ... |
| 3         | count     | 5V                | ... |
| 4         | count     | 5V                | ... |

组合:

| combination_id | formula | formula_mapping | ... |
| 1              | x + y   | { x: 3, y: 4 }  | ... |
| 2              | x * y   | { x: 1, y: 3 }  | ... |

我想选择所有组合,并与在groups.formula_mapping列中定义的JSON关键字引用的传感器进行内部联接。我尝试使用

SELECT * FROM combinations 
INNER JOIN sensors 
  ON json_contains(combinations.formula_mapping, sensors.sensor_id, '$.*');

但是,通配符*似乎不允许使用。所有其他方法JSON_KEYS,JSON_EXTRACT等似乎都需要为查询定义特定的路径。是否可以使用上述模式执行1个联接查询?还是我必须先查询组合,然后再执行另一个查询?

经过修改,以包含预期的查询结果:

| combination_id | sensor_id |
| 1              | 3         |
| 1              | 4         |
| 2              | 1         |
| 2              | 3         |

1 个答案:

答案 0 :(得分:1)

您可以改为使用Json_Search()函数:

SELECT * FROM combinations AS c
INNER JOIN sensors AS s
  ON JSON_SEARCH(c.formula_mapping, 'one', s.sensor_id) IS NOT NULL