mysql - 带有 mysql JSON 列的 IN 语句不起作用?
问题描述
我正在尝试在 json 列数据上查询 MySQL 表,但未按预期工作
JSON_EXTRACT(data, \"$.STUDENT_NAME\") IN ('JASMINE','SAM')
因为这JSON_EXTRACT(data, \"$.STUDENT_NAME\") IN ('JASMINE')
仅适用于一个元素但不适用于数组中的多个元素,有什么想法吗?
完整查询
SELECT `data_uploads`.* FROM `data_uploads` WHERE `data_uploads`.`product_id` = 96 AND (dlname = 'STUDENT' AND JSON_EXTRACT(data, \"$.STUDENT_NAME\") IN ('JASMINE', 'SAM'))
预期成绩
product_id: 96, dlname: "STUDENT", data: {"CLASS"=>"GRADE-I", "GRAD_IMAGE"=>"jasmine_grad.jpg", "SECTION"=>"A", "STUDENT_IMAGE"=>"jasmine.jpg", "STUDENT_NAME"=>"JASMINE"}, created_at: "2021-06-18 10:16:56", updated_at: "2021-06-18 10:16:56"
product_id: 96, dlname: "STUDENT", data: {"CLASS"=>"GRADE-I", "GRAD_IMAGE"=>"sam_grad.jpg", "SECTION"=>"A", "STUDENT_IMAGE"=>"sam.jpg", "STUDENT_NAME"=>"SAM"}, created_at: "2021-06-18 10:16:56", updated_at: "2021-06-18 10:16:56"
但上面的查询返回一个空数组
Rails 活动记录查询:
DataUpload.where(product_id: 96).where("dlname = 'STUDENT' AND JSON_EXTRACT(data, '$.STUDENT_NAME') IN ('JASMINE','SAM')")
解决方案
用于JSON_UNQUOTE()
在测试之前删除值周围的引号。
SELECT *
FROM data_uploads
WHERE JSON_UNQUOTE(JSON_EXTRACT(data, "$.STUDENT_NAME")) IN ('JASMINE','SAM');
您还可以使用->>
速记一次提取和取消引用。
SELECT *
FROM data_uploads
WHERE data->>"$.STUDENT_NAME" IN ('JASMINE','SAM');
推荐阅读
- r - 如何填充 R 中 plot_ly 中两个子图的中间以绘制为“体积”图?
- c# - 如何将 IdentityServer 与 docker-compose 一起使用?
- javascript - 在 jquery 或 puppeteer 上动态调用没有 src="" 的 iframe 上的 WebScraping
- python - 如何将意图与 cogs 一起使用?
- mysql - 在 SQL 中轻松查询 2 个表
- javascript - 如何使用 JavaScript 根据 id 更改 svg 路径的颜色?
- python - ax.annotate 没有按正确的顺序注释?
- c - 使用 APIENTRY 的控制台立即关闭
- android-fragments - Popbackstack 总是返回之前的调用
- javascript - Javascript不适用于wordpress模板