mysql - SQL 以 JSON 格式复制和保存
问题描述
我在 mysql 服务器 5.7.27 上并尝试将数据从一个表复制到另一个具有格式化 json 值的表。
假设有两个表:-
files(id, applicant_id, passport, license);
attachments(id, applicant_id, passport, license);
表中的护照和许可证列files
具有带有其文字值的字符串数据类型,而在附件中,数据类型被定义为 json 并且需要与其他数据(例如文件名)一起保存。
我想将数据从files
一个表复制到attachments
另一个表,并为 json 数据提供一些额外的格式。
INSERT INTO attachments (applicant_id, license) FROM files (applicant_id, '{"\name\": \"Driving License\", "\file\": license}');
但这给了我一个错误:- 3140 Invalid JSON text: "Invalid value."
解析 的值的正确语法是license
什么?
解决方案
看来您正在寻找INSERT INTO ... SELECT
:
INSERT INTO attachments (applicant_id, license)
SELECT
applicant_id,
CONCAT('{"\name\": \"Driving License\", "\file\": \"', license, '\"}')
FROM files;
在这里,我使用表CONCAT
中的许可证值来构建您想要的 JSON 文字值files
。
推荐阅读
- objective-c-blocks - Microsoft MSAL ObjC - 尝试以交互方式获取多个范围的令牌
- python - 如何管理 pytests 的 `tests` 文件夹名称与 jupyter 扩展的冲突
- c# - Opencover 分支百分比始终为 0
- python - 使用变量名访问字典
- csv - 如何通过 Go 检查 CSV 文件的字符编码?
- amazon-web-services - 使用 terraform 创建时无法访问 RDS
- reactjs - 使用 useEffect() 和 setTimeOut() 进行条件渲染
- linux - 为什么 pthread_exit 使用 void*?
- javascript - 如何调度 Vue 计算属性
- keras - 多输入输出CNN