【问题标题】:IN statement with mysql JSON column not working?带有 mysql JSON 列的 IN 语句不起作用?
【发布时间】:2021-09-14 01:17:36
【问题描述】:

我正在尝试在 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')")

【问题讨论】:

  • 显示样本数据和预期结果?
  • @ysth 更新了查询和预期结果
  • 为什么双引号前有反斜杠?
  • 输出中的 data 不是 JSON。
  • {"CLASS"=>"GRADE-I", "GRAD_IMAGE"=>"jasmine_grad.jpg", "SECTION"=>"A", "STUDENT_IMAGE"=>"jasmine.jpg", "STUDENT_NAME"=>"JASMINE"} 它不是 json

标签: mysql ruby-on-rails json


【解决方案1】:

在测试之前使用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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 2018-04-23
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    相关资源
    最近更新 更多