用另一个 MySQL 表的值更新一个 MySQL 表(原始表的数据类型是 JSOn)

Posted

技术标签:

【中文标题】用另一个 MySQL 表的值更新一个 MySQL 表(原始表的数据类型是 JSOn)【英文标题】:Update one MySQL table with values from another (Datatype of the original table is JSOn) 【发布时间】:2019-11-01 19:12:03 【问题描述】:

我正在尝试根据另一个 mysql 表的信息更新一个表。

我想将值与要更新的另一个表进行比较的原始表中有一个 JSON 对象。

这是我的桌子的样子

原表

表1

id | programme
------------
1  | ["22","34"]
2  | ["10","11","12","13","14","15","17","18","19","20"]

表格待更新

表2

id | programme_id | table1_id
-----------------------------
1  |     22       |
2  |     18       |
3  |     12       |


UPDATE table2
INNER JOIN table1 USING (programme_id)
SET table2.table1_id = table1.id

这是预期的输出:

id | programme_id | table1_id
-----------------------------
1  |     22       |   1
2  |     18       |   2
3  |     12       |   2

【问题讨论】:

我能够通过 MySQL 内部连接 ​​UPDATE table1` INNER JOIN table2 ON table1.id = table2.table1_id SET table1.programme_id = table2.programme_id`解决这个问题 【参考方案1】:
set sql_safe_updates = 0;
update table2
inner join table1 
on JSON_SEARCH(table1.programme,'one',table2.programme_id) is not null
set table2.table1_id = table1.id;

【讨论】:

不过,感谢您的回复;我不明白 JSON_SEARCH(table1.programme,'one',table2.programme_id) 查询中的 one 是什么。你的意思是 22 在我的情况下等等 你 table1 中的 JSON 数据实际上是一个数组。函数 JSON_SEARCH 返回找到搜索值的索引值。参数“one”仅返回第一次出现的索引,参数“all”返回存在搜索值的所有索引。但是,这与我们无关,因为我们不关心索引值,我们只想知道搜索到的值是否存在于我们的 JSON 列及其对应的 table1_id 中,仅此而已。 22 在你的情况下是我的回答中的 table2.programme_id 。希望现在清楚。 或者,您可以使用另一个函数来替换 JSON_SEARCH 是: on JSON_CONTAINS(table1.programme,concat('"',table2.programme_id,'"')) = 1

以上是关于用另一个 MySQL 表的值更新一个 MySQL 表(原始表的数据类型是 JSOn)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 用另一个表的值更新一个表 - 我可以在 bigquery 中使用它吗?

Mysql:用另一个表的选择最大值更新表[重复]

MYSQL:我想用另一个表中的值更新表中的所有行,其中第一个表中的值等于第二个表

用另一个表的值更新表

用另一个查询的随机值更新mysql表?

MySQL用另一张表的字段值Update本表