我有两张table;用户和消息。
用户表
| 标识符|姓名|
| - -|- -|
| 一个|麦克|
| 2个|若翰|
消息表如下所示
| 标识符|职称|用户标识|
| - -|- -|- -|
| 一个|AAAAAA|一个|
| 2个|BBBBBB|一个|
| 三个|中交|2个|
我必须将titles
列添加到用户表。
在此列中,记录值应该是与每个成员关联的消息标题的数组。即
| 标识符|姓名|标题|
| - -|- -|- -|
| 一个|麦克|【“AAAAAA”、“BBBBBB”】|
| 2个|若翰|[“中交”]|
我知道这是一种非规范化的、无意义的数据保存方式,但这只是一种假设情况。
在这种情况下,我添加了名为titles
的json列,并创建了以下查询,以便使用title数组更新用户的所有记录。
UPDATE
`users`
SET
`users`.`titles` =
SELECT JSON_ARRAYAGG(`messages`.`title`)
FROM `users`
LEFT OUTER JOIN `messages`
ON `messages.`user_id` = `users`.`id`
GROUP BY `members`.`id`
这里我使用JSON_ARRAYAGG
创建一个数组。当我运行它时,我收到了一个语法错误。
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 10
这个查询有什么问题吗?你能教我如何修复它,如何实现我想要做的事情吗?
mysql版本是8.0.24。
先谢谢你了。
1条答案
按热度按时间qvtsj1bj1#
当然,必须在
users
表结构之前添加titles
列。不需要LEFT联接-新创建的列在所有行中都已包含NULL。但是,如果更新现有数据,包括必须清除其值的那些行,则使用
NATURAL LEFT JOIN
。