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

如何使用JSON字段连接MySQL表?,mysql,Mysql,我有两个表,我想执行连接查询 传感器是一个表,其中记录引用传感器元数据。 “组合”是根据用户定义的公式将多个传感器数据组合成单个传感器数据的表格 传感器: | sensor_id | attribute | operating_voltage | ... | | 1 | temp | 5V | ... | | 2 | humidity | 5V | ... | | 3 | co

我有两个表,我想执行连接查询

传感器是一个表,其中记录引用传感器元数据。 “组合”是根据用户定义的公式将多个传感器数据组合成单个传感器数据的表格

传感器:

| 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 }  | ... |
我想选择所有组合,内部连接传感器,这些传感器由combines.formula_mapping列中定义的JSON键引用。我试着用

SELECT * FROM combinations 
INNER JOIN sensors 
  ON json_contains(combinations.formula_mapping, sensors.sensor_id, '$.*');
但是,通配符*似乎是不允许的。所有其他方法JSON_键、JSON_提取等似乎都需要为查询定义一个特定的路径。是否可以使用上述模式执行1个联接查询?或者我必须先查询组合,然后再进行另一个查询

编辑以包括预期的查询结果:

| combination_id | sensor_id |
| 1              | 3         |
| 1              | 4         |
| 2              | 1         |
| 2              | 3         |
您可以改为使用函数:

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

预期结果是什么(根据给定的样本数据)?编辑问题以添加表格格式的预期输出。@Madhur编辑以包含预期结果尝试了此操作,但返回空集,将尝试探索JSON_搜索函数的更多内容,无论如何,谢谢@jlyh您可以设置一个,以便我可以尝试与您的样本数据。阅读:Hi@Madhur Bhaiya我认为这是因为JSON_搜索中的一个错误,它不能处理非字符串值-感谢@jlyh提供的值得注意的信息。我尝试了其他json函数组合,但似乎没有任何效果。我认为更好的解决方案是改变Json的存储方式。而不是将值存储为整数;您可以将它们存储为字符串。例如:
“{”x:“1”,“y:“2”}”