【问题标题】:json_contains issue with the query, likejson_contains 查询问题,例如
【发布时间】:2020-05-21 20:43:38
【问题描述】:

我尝试查找在类别列中存储为 json 的某些类别的食物。

我的查询:select * fromfoodswhere json_contains(categories, '["Aliments"]')

这应该在列表中返回一个在类别列中具有内容的元素:

[
    "Aliments et boissons à base de végétaux",
    "Aliments d'origine végétale",
    "Matières grasses",
    "Matières grasses végétales",
    "Huiles"
]

我做错了什么查询?

【问题讨论】:

  • 你运行的是哪个版本的 MySQL?
  • 仅仅因为您使用 json 格式并不意味着您没有在列中存储多个值。这几乎总是表明数据库设计不佳。
  • 版本 MYSQL 8
  • 如果我使用数据透视表会更好吗? food_category 存储? @HoneyboyWilson

标签: mysql sql arrays json


【解决方案1】:

JSON_CONTAINS() 搜索完全匹配,不实现模式匹配。

由于您使用的是 MySQL 8.0,您可以使用 json_table() 取消嵌套数组,然后对每个元素进行模式匹配:

select f.*
from foods f
where exists (
    select 1 
    from json_table(f.categories, "$[*]" columns(cat varchar(255) path "$")) c
    where c.cat like '%Aliments%'
)

【讨论】:

    【解决方案2】:

    JSON_CONTAINS 不像LIKE 那样工作,它只是寻找确切的值。您应该首先提取该字段,然后对其运行 LIKE 查询。由于您在根目录中搜索(根据您提供的数据),您需要类似的东西;

    select * 
    from foods 
    where json_extract(categories,'$') LIKE '%Aliments%'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 2013-01-24
      • 1970-01-01
      • 2020-09-04
      • 2019-04-19
      相关资源
      最近更新 更多