MariaDB JSON_EXTRACT 函数结合IN不生效的问题处理

205 阅读1分钟

背景知识

在 MariaDB 中,如果你需要查询包含多个记录的 JSON 字段,并且希望检查 number 字段的值是否在指定的集合中,可以使用 JSON_EXTRACT 函数结合 IN 操作符。

示例

假设有一个表 data_items,其中有一列 metadata 存储了 JSON 数据,如下所示:

{
  "name": "example1",
  "number": "647"
}

    {
      "name": "example2",
      "number": "648"
    }

使用以下 SQL 查询来检查 name 字段的值在(example1,example2)的集合中的记录


    SELECT *
    FROM data_items
    WHERE JSON_EXTRACT(metadata, '$.name') IN ("example1", "example2");

但是如果使用IN ("example1") 则可以产生一条记录

问题&解决

按上述SQL执行并没有按预期产生2条查询结果,解决方法是将IN ("exapmpe1", "example2"),改为IN ('"exapmpe1"', '"example2"'),即用单引号括起来,就可以正常执行。 但如果是一个查询条件,就需要去掉单引号,像这样IN ("exapmpe1")才能正常执行

相关资料

SQL中字符串变量主要用单引号''来表示,虽然有些时候双引号也能生效,但是应尽量用单引号。此例中IN中只放一个双引号值能查出结果可能是IN函数做了某些特殊处理,但是这样会给更通用的情况造成混淆,所以还是应使用单引号。